diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-12-12 23:24:39 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-12-13 13:04:37 +0000 |
commit | 233860f005ccd76c7604cf0eac18b9eda3d984f4 (patch) | |
tree | 24d6d0569d02d2a4d152d33bf310cae5f065e772 | |
parent | ba1b6ed1c91ef310b19a2f33523b97f026750303 (diff) | |
download | gcc-233860f005ccd76c7604cf0eac18b9eda3d984f4.zip gcc-233860f005ccd76c7604cf0eac18b9eda3d984f4.tar.gz gcc-233860f005ccd76c7604cf0eac18b9eda3d984f4.tar.bz2 |
libstdc++: Swap expressions in noexcept-specifier of ranges::not_equal_to
Although this should never make a difference for sensible code, we
should really make the expression in the noexcept-specifier match the
expression in the function body.
libstdc++-v3/ChangeLog:
* include/bits/ranges_cmp.h (not_equal_to): Make order of
expressions in noexcept-specifier match the body.
* testsuite/20_util/function_objects/range.cmp/not_equal_to.cc:
Check noexcept.
-rw-r--r-- | libstdc++-v3/include/bits/ranges_cmp.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/ranges_cmp.h b/libstdc++-v3/include/bits/ranges_cmp.h index 8425016..b1a33f4 100644 --- a/libstdc++-v3/include/bits/ranges_cmp.h +++ b/libstdc++-v3/include/bits/ranges_cmp.h @@ -99,7 +99,7 @@ namespace ranges requires equality_comparable_with<_Tp, _Up> constexpr bool operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::declval<_Up>() == std::declval<_Tp>())) + noexcept(noexcept(std::declval<_Tp>() == std::declval<_Up>())) { return !equal_to{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); } using is_transparent = __is_transparent; diff --git a/libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc b/libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc index 5b4f3cb..1b5167f 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc @@ -68,9 +68,26 @@ test02() VERIFY( ! f(x, x) ); } +struct A +{ + bool operator==(const A&) const noexcept { return true; } + bool operator==(A&&) const { return true; } +}; + +void +test03() +{ + const A a{}; + static_assert( noexcept(a == a) ); + static_assert( ! noexcept(a == A{}) ); + static_assert( noexcept(std::ranges::not_equal_to{}(a, a)) ); + static_assert( ! noexcept(std::ranges::not_equal_to{}(a, A{})) ); +} + int main() { test01(); test02(); + test03(); } |