]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/18_support/comparisons/algorithms/strong_order.cc
1 // Copyright (C) 2019 Free Software Foundation, Inc.
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
18 // { dg-options "-std=gnu++2a" }
19 // { dg-do compile { target c++2a } }
24 using std::strong_order
;
25 using std::strong_ordering
;
27 static_assert( strong_order(1, 2) == strong_ordering::less
);
28 static_assert( strong_order(1, 1) == strong_ordering::equal
);
29 static_assert( strong_order(2, 1) == strong_ordering::greater
);
30 static_assert( noexcept(strong_order(1, 1)) );
32 constexpr strong_ordering
different_cv_quals(int i
, const int j
)
34 return strong_order(i
, j
);
36 static_assert( different_cv_quals(42, 999) == strong_ordering::less
);
37 static_assert( different_cv_quals(-999, -999) == strong_ordering::equal
);
38 static_assert( different_cv_quals(-99, -111) == strong_ordering::greater
);
44 constexpr strong_ordering
operator<=>(X l
, X r
)
46 if (l
.i
< 0 && r
.i
< 0)
47 return strong_ordering::equivalent
;
53 static_assert( strong_order(X
{1}, X
{1}) == strong_ordering::equal
);
54 static_assert( strong_order(X
{-1}, X
{-2}) == strong_ordering::equivalent
);
55 static_assert( strong_order(X
{1}, X
{2}) == strong_ordering::greater
);
56 static_assert( !noexcept(strong_order(X
{1}, X
{2})) );