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.
This commit is contained in:
parent
ba1b6ed1c9
commit
233860f005
2 changed files with 18 additions and 1 deletions
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue