1 // Copyright (C) 2019-2021 Free Software Foundation, Inc. 2 // 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) 7 // any later version. 8 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. 13 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/>. 17 18 // { dg-options "-std=gnu++2a" } 19 // { dg-do compile { target c++2a } } 20 21 #include <concepts> 22 23 static_assert( ! std::strict_weak_order<bool, void, void> ); 24 static_assert( ! std::strict_weak_order<bool(), void, void> ); 25 static_assert( ! std::strict_weak_order<bool(*)(), void, void> ); 26 static_assert( ! std::strict_weak_order<bool(&)(int, int), void, void> ); 27 static_assert( ! std::strict_weak_order<bool(), int, int> ); 28 static_assert( ! std::strict_weak_order<bool() const, int, int> ); 29 30 static_assert( std::strict_weak_order<bool(*)(int, int), short, long> ); 31 static_assert( std::strict_weak_order<bool(&)(const void*, const void*), char[2], int*> ); 32 33 static_assert( ! std::strict_weak_order<bool& (const long*, short), long*, char> ); 34 35 struct A; 36 static_assert( ! std::strict_weak_order<int A::*, const A&, const A&> ); 37 static_assert( ! std::strict_weak_order<void (A::*)(long&), const A*, long&> ); 38 static_assert( ! std::strict_weak_order<void (A::*)(long&) const, A*, long&> ); 39 static_assert( std::strict_weak_order<long (A::*)(A*) const, A*, A*> ); 40 41 struct F 42 { 43 void operator()(long, long) const; 44 bool& operator()(int, const int&) const; 45 }; 46 static_assert( ! std::strict_weak_order<F, long, long> ); 47 static_assert( std::strict_weak_order<F&, int, int> ); 48 static_assert( std::strict_weak_order<const F&, const int, const int> ); 49