aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-12-12 23:24:39 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2024-12-13 13:04:37 +0000
commit233860f005ccd76c7604cf0eac18b9eda3d984f4 (patch)
tree24d6d0569d02d2a4d152d33bf310cae5f065e772
parentba1b6ed1c91ef310b19a2f33523b97f026750303 (diff)
downloadgcc-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.h2
-rw-r--r--libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc17
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();
}