Re: experimental status of C++17

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 20 Mar 2019 at 14:31, Florian-Bogdan Tudoran <tfbogdan@xxxxxxxxx> wrote:
>
> The decision in my company was to hold off until the experimental status is
> cleared for C++17. Guess it's time to switch back to C++14 on local
> branches then (ugh). That makes me wonder though, is there anything
> separating GCC8 from C++17 support which is not experimental? Or is it just
> a matter of giving it more time until the doubt is gone?

Apart from the features that are missing completely (like
<memory_resource> and everything defined in those headers) there have
been a number of fixes to C++17 components since GCC 8:

49c83dca49c Rewrite variant, also PR libstdc++/85517
41cda271e87 Remove some more code duplication in std::optional
58e897da03b PR libstdc++/87855 fix optional for types with non-trivial copy/move
8815ac910d1 PR libstdc++/87431 fix regression introduced by r264574
3714571df65 PR libstdc++/83511 add default argument to basic_string_view::substr
0ee35a37cc2 PR libstdc++/87855
c64433506eb PR libstdc++/88084 - Implement LWG 2777
ab5b9ece1ee PR libstdc++/87619
4429133c757 Avoid redundant runtime checks in std::visit
bc35ec6d4ca PR libstdc++/87431 optimise valueless_by_exception()
a9267d6ad6b Limit workaround for Clang bug to __clang_major__ <= 7
d3a3029ca74 Refactor std::optional SFINAE constraints
a4c655fb498 PR libstdc++/86874 fix std::variant::swap regression
6dd9755335f     * include/std/variant (__accepted_index): Use void_t.
09e2d757369 Decorate string_view members with nonnull attribute
228cd7c3ad6 Qualify another call in <variant>
581da9d39d0 Qualify std::__invoke in <variant> to prevent ADL
5fef6f2fd86 PR libstdc++/85642 fix is_nothrow_default_constructible<optional<T>>
0c9b443272c PR libstdc++/84769 qualify call to std::get<0>
fc557c2bedb Add fixed underlying type to enum path::format
5256b0dd6ec Add noexcept to filesystem::path query functions
adc6beeea7c Define new filesystem::__file_clock type
9346fb0e7ea Fix bugs in filesystem::path::lexically_normal()
8f31a5fa227 LWG 3171: restore stream insertion for filesystem::directory_entry
b37e7cb040d LWG 2936: update path::compare logic and optimize string comparisons
6bec006a621 PR libstdc++/71044 optimize std::filesystem::path construction
637f32c4215 Overload std::distance and std::advance for path::iterator
59d8a86834d PR libstdc++/80762 avoid ambiguous __constructible_from<void, void>
8092d42a27b PR libstdc++/83306 make filesystem_error no-throw copyable
c8fb3443911 PR libstdc++/67843 set shared_ptr lock policy at build-time
779172019b8 PR libstdc++/86597 directory_entry observers should clear error_code
3052e4ec519 PR libstdc++/86595 add missing noexcept
339e22fd827 LWG 2989 hide path iostream operators from normal lookup
2fd48392d0a PR libstdc++/78870 support std::filesystem on Windows
861db1097d3 Refactor path construction from null terminated iterator ranges
048233284d3 Fix handling of an empty filename at end of a path
7330ffed52f PR libstdc++/83891 fix path::is_absolute() for non-POSIX targets
e4e90696470 PR libstdc++/84159 fix appending strings to paths
e6ac4004fe4 PR libstdc++/85671 allow copy elision in path concatenation


I'm not sure how many of those changes were backported to gcc-8-branch
and how many are only on trunk. I know for sure that the change for PR
87619 is an ABI change, specifically this prints "2 4 4" with GCC 8
and "2 2 4" with GCC 9:

#include <iostream>
#include <utility>
#include <variant>

template<std::size_t N>
struct X
{
  enum E : char { };
};

template<std::size_t... N>
std::size_t
size(std::index_sequence<N...>)
{
  return sizeof(std::variant<typename X<N>::E...>);
}

int main()
{
  std::cout << size(std::make_index_sequence<254>{})
    << ' '  << size(std::make_index_sequence<255>{})
    << ' '  << size(std::make_index_sequence<256>{})
    << '\n';
}

Some of the changes to std::filesystem are ABI changes too, including
at least PR 83306.

There may be other ABI changes, I haven't really kept track, because
the point of it being experimental is that we can make such changes.



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux