// Copyright 2025 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include #include #if defined(__has_include) # if __has_include() # define HAS_COMPARE # endif #endif #if !defined(__cpp_impl_three_way_comparison) BOOST_PRAGMA_MESSAGE( "Test skipped because __cpp_impl_three_way_comparison is not defined" ) int main() {} #elif !( __cpp_impl_three_way_comparison >= 201907L ) BOOST_PRAGMA_MESSAGE( "Test skipped because __cpp_impl_three_way_comparison is defined to " BOOST_STRINGIZE(__cpp_impl_three_way_comparison) ) int main() {} #elif !defined(HAS_COMPARE) BOOST_PRAGMA_MESSAGE( "Test skipped because is not available" ) int main() {} #else #define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) template void test1() { constexpr auto eq = 0 <=> 0; constexpr boost::array a1 = {}; constexpr boost::array a2 = {}; STATIC_ASSERT( ( a1 <=> a2 ) == eq ); } template void test2() { constexpr auto eq = 0 <=> 0; constexpr auto lt = 0 <=> 1; constexpr auto gt = 1 <=> 0; { constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; constexpr boost::array a2 = {{ 1, 2, 3, 4 }}; STATIC_ASSERT( ( a1 <=> a2 ) == eq ); } { constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; constexpr boost::array a2 = {{ 1, 2, 3, 5 }}; STATIC_ASSERT( ( a1 <=> a2 ) == lt ); } { constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; constexpr boost::array a2 = {{ 1, 2, 3, 2 }}; STATIC_ASSERT( ( a1 <=> a2 ) == gt ); } } int main() { test1(); test1(); test1(); test2(); } #endif