This isn't terribly important, but these operators might as well be noexcept, and committing it now isn't going to cause any problems backporting anything to gcc-6-branch at the last minute.
I have a couple more patches for Filesystem TS issues coming too. Tested x86_64-linux, committed to trunk.
commit ac48e4cb8e5ff17a03dd478077568a8fd023abde Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Apr 19 18:31:43 2016 +0100 Add noexcept to Filesystem TS operators * include/experimental/bits/fs_fwd.h (operator&, operator|, operator^, operator~ operator&=, operator|=, operator^=): Add noexcept to overloaded operators for copy_options, perms and directory_options. * src/filesystem/ops.cc (make_file_type, make_file_status, is_not_found_errno, file_time): Add noexcept. diff --git a/libstdc++-v3/include/experimental/bits/fs_fwd.h b/libstdc++-v3/include/experimental/bits/fs_fwd.h index 1482e18..57aa4d3 100644 --- a/libstdc++-v3/include/experimental/bits/fs_fwd.h +++ b/libstdc++-v3/include/experimental/bits/fs_fwd.h @@ -93,7 +93,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 }; constexpr copy_options - operator&(copy_options __x, copy_options __y) + operator&(copy_options __x, copy_options __y) noexcept { using __utype = typename std::underlying_type<copy_options>::type; return static_cast<copy_options>( @@ -101,7 +101,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr copy_options - operator|(copy_options __x, copy_options __y) + operator|(copy_options __x, copy_options __y) noexcept { using __utype = typename std::underlying_type<copy_options>::type; return static_cast<copy_options>( @@ -109,7 +109,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr copy_options - operator^(copy_options __x, copy_options __y) + operator^(copy_options __x, copy_options __y) noexcept { using __utype = typename std::underlying_type<copy_options>::type; return static_cast<copy_options>( @@ -117,22 +117,22 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr copy_options - operator~(copy_options __x) + operator~(copy_options __x) noexcept { using __utype = typename std::underlying_type<copy_options>::type; return static_cast<copy_options>(~static_cast<__utype>(__x)); } inline copy_options& - operator&=(copy_options& __x, copy_options __y) + operator&=(copy_options& __x, copy_options __y) noexcept { return __x = __x & __y; } inline copy_options& - operator|=(copy_options& __x, copy_options __y) + operator|=(copy_options& __x, copy_options __y) noexcept { return __x = __x | __y; } inline copy_options& - operator^=(copy_options& __x, copy_options __y) + operator^=(copy_options& __x, copy_options __y) noexcept { return __x = __x ^ __y; } @@ -163,7 +163,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 }; constexpr perms - operator&(perms __x, perms __y) + operator&(perms __x, perms __y) noexcept { using __utype = typename std::underlying_type<perms>::type; return static_cast<perms>( @@ -171,7 +171,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr perms - operator|(perms __x, perms __y) + operator|(perms __x, perms __y) noexcept { using __utype = typename std::underlying_type<perms>::type; return static_cast<perms>( @@ -179,7 +179,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr perms - operator^(perms __x, perms __y) + operator^(perms __x, perms __y) noexcept { using __utype = typename std::underlying_type<perms>::type; return static_cast<perms>( @@ -187,22 +187,22 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr perms - operator~(perms __x) + operator~(perms __x) noexcept { using __utype = typename std::underlying_type<perms>::type; return static_cast<perms>(~static_cast<__utype>(__x)); } inline perms& - operator&=(perms& __x, perms __y) + operator&=(perms& __x, perms __y) noexcept { return __x = __x & __y; } inline perms& - operator|=(perms& __x, perms __y) + operator|=(perms& __x, perms __y) noexcept { return __x = __x | __y; } inline perms& - operator^=(perms& __x, perms __y) + operator^=(perms& __x, perms __y) noexcept { return __x = __x ^ __y; } // Bitmask type @@ -211,7 +211,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 }; constexpr directory_options - operator&(directory_options __x, directory_options __y) + operator&(directory_options __x, directory_options __y) noexcept { using __utype = typename std::underlying_type<directory_options>::type; return static_cast<directory_options>( @@ -219,7 +219,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr directory_options - operator|(directory_options __x, directory_options __y) + operator|(directory_options __x, directory_options __y) noexcept { using __utype = typename std::underlying_type<directory_options>::type; return static_cast<directory_options>( @@ -227,7 +227,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr directory_options - operator^(directory_options __x, directory_options __y) + operator^(directory_options __x, directory_options __y) noexcept { using __utype = typename std::underlying_type<directory_options>::type; return static_cast<directory_options>( @@ -235,22 +235,22 @@ _GLIBCXX_END_NAMESPACE_CXX11 } constexpr directory_options - operator~(directory_options __x) + operator~(directory_options __x) noexcept { using __utype = typename std::underlying_type<directory_options>::type; return static_cast<directory_options>(~static_cast<__utype>(__x)); } inline directory_options& - operator&=(directory_options& __x, directory_options __y) + operator&=(directory_options& __x, directory_options __y) noexcept { return __x = __x & __y; } inline directory_options& - operator|=(directory_options& __x, directory_options __y) + operator|=(directory_options& __x, directory_options __y) noexcept { return __x = __x | __y; } inline directory_options& - operator^=(directory_options& __x, directory_options __y) + operator^=(directory_options& __x, directory_options __y) noexcept { return __x = __x ^ __y; } typedef chrono::time_point<chrono::system_clock> file_time_type; diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc index c32197e..756e140 100644 --- a/libstdc++-v3/src/filesystem/ops.cc +++ b/libstdc++-v3/src/filesystem/ops.cc @@ -249,7 +249,7 @@ namespace typedef struct ::stat stat_type; inline fs::file_type - make_file_type(const stat_type& st) + make_file_type(const stat_type& st) noexcept { using fs::file_type; #ifdef _GLIBCXX_HAVE_S_ISREG @@ -273,7 +273,7 @@ namespace } inline fs::file_status - make_file_status(const stat_type& st) + make_file_status(const stat_type& st) noexcept { return fs::file_status{ make_file_type(st), @@ -282,13 +282,13 @@ namespace } inline bool - is_not_found_errno(int err) + is_not_found_errno(int err) noexcept { return err == ENOENT || err == ENOTDIR; } inline fs::file_time_type - file_time(const stat_type& st) + file_time(const stat_type& st) noexcept { using namespace std::chrono; return fs::file_time_type{