While working on an unrelated issue I noticed that the compiler didn't like some of these declarations after preprocessing, when they aren't protected by system-header permissiveness.
I thought about limiting the permissiveness to only extern "C" functions, but I believe that system headers are adding more C++ declarations, so we'd likely run into this issue again. Shouldn't we build libstdc++ with -Wsystem-headers? Maybe along with -Wno-error=system-headers? Jonathan approved these changes elsewhere. Jason
commit abe66184d116f85f10108191b081f48dd0cfe3aa Author: Jason Merrill <ja...@redhat.com> Date: Tue Nov 14 13:48:57 2017 -0500 Correct noexcept mismatch in declarations. * include/bits/fs_ops.h (permissions): Add noexcept. * include/bits/fs_fwd.h (copy, copy_file): Remove noexcept. (permissions): Add noexcept. * include/std/string_view (find_first_of): Add noexcept. diff --git a/libstdc++-v3/include/bits/fs_fwd.h b/libstdc++-v3/include/bits/fs_fwd.h index f408a39b974..66b0d20f027 100644 --- a/libstdc++-v3/include/bits/fs_fwd.h +++ b/libstdc++-v3/include/bits/fs_fwd.h @@ -300,11 +300,11 @@ _GLIBCXX_END_NAMESPACE_CXX11 void copy(const path& __from, const path& __to, copy_options __options); void copy(const path& __from, const path& __to, copy_options __options, - error_code&) noexcept; + error_code&); bool copy_file(const path& __from, const path& __to, copy_options __option); bool copy_file(const path& __from, const path& __to, copy_options __option, - error_code&) noexcept; + error_code&); path current_path(); @@ -319,7 +319,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 file_time_type last_write_time(const path&); file_time_type last_write_time(const path&, error_code&) noexcept; - void permissions(const path&, perms, perm_options, error_code&); + void permissions(const path&, perms, perm_options, error_code&) noexcept; path proximate(const path& __p, const path& __base, error_code& __ec); path proximate(const path& __p, const path& __base, error_code& __ec); diff --git a/libstdc++-v3/include/bits/fs_ops.h b/libstdc++-v3/include/bits/fs_ops.h index 075d61e2a63..22422bd1f4d 100644 --- a/libstdc++-v3/include/bits/fs_ops.h +++ b/libstdc++-v3/include/bits/fs_ops.h @@ -253,7 +253,7 @@ namespace filesystem void permissions(const path& __p, perms __prms, perm_options __opts, - error_code& __ec); + error_code& __ec) noexcept; inline path proximate(const path& __p, error_code& __ec) { return proximate(__p, current_path(), __ec); } diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view index 1900b867841..49b6c378370 100644 --- a/libstdc++-v3/include/std/string_view +++ b/libstdc++-v3/include/std/string_view @@ -323,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return this->find(__c, __pos); } constexpr size_type - find_first_of(const _CharT* __str, size_type __pos, size_type __n) const; + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const noexcept; constexpr size_type find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept