]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/variant2/test/variant_eq_ne_cx.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / variant2 / test / variant_eq_ne_cx.cpp
1
2 // Copyright 2017, 2019 Peter Dimov
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 //
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
8
9 #include <boost/variant2/variant.hpp>
10 using namespace boost::variant2;
11
12 #if !defined(BOOST_MP11_HAS_CXX14_CONSTEXPR)
13
14 #include <boost/config/pragma_message.hpp>
15
16 BOOST_PRAGMA_MESSAGE("Skipping constexpr op==, op!= test because BOOST_MP11_HAS_CXX14_CONSTEXPR is not defined")
17
18 int main() {}
19
20 #else
21
22 struct X
23 {
24 };
25
26 inline constexpr bool operator==( X const&, X const& ) { return false; }
27 inline constexpr bool operator!=( X const&, X const& ) { return false; }
28
29 #define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
30
31 int main()
32 {
33 {
34 constexpr variant<int> v1, v2, v3( 1 ), v4( 1 );
35
36 STATIC_ASSERT( v1 == v2 );
37 STATIC_ASSERT( !(v1 != v2) );
38
39 STATIC_ASSERT( v1 != v3 );
40 STATIC_ASSERT( !(v1 == v3) );
41
42 STATIC_ASSERT( v3 == v4 );
43 STATIC_ASSERT( !(v3 != v4) );
44 }
45
46 {
47 constexpr variant<int, float> v1, v2, v3( 1 ), v4( 1 ), v5( 3.14f ), v6( 3.14f );
48
49 STATIC_ASSERT( v1 == v2 );
50 STATIC_ASSERT( !(v1 != v2) );
51
52 STATIC_ASSERT( v1 != v3 );
53 STATIC_ASSERT( !(v1 == v3) );
54
55 STATIC_ASSERT( v3 == v4 );
56 STATIC_ASSERT( !(v3 != v4) );
57
58 STATIC_ASSERT( v1 != v5 );
59 STATIC_ASSERT( !(v1 == v5) );
60
61 STATIC_ASSERT( v3 != v5 );
62 STATIC_ASSERT( !(v3 == v5) );
63
64 STATIC_ASSERT( v5 == v6 );
65 STATIC_ASSERT( !(v5 != v6) );
66 }
67
68 {
69 constexpr variant<int, int, float> v1, v2, v3( in_place_index_t<1>{} ), v4( in_place_index_t<1>{} ), v5( 3.14f ), v6( 3.14f );
70
71 STATIC_ASSERT( v1 == v2 );
72 STATIC_ASSERT( !(v1 != v2) );
73
74 STATIC_ASSERT( v1 != v3 );
75 STATIC_ASSERT( !(v1 == v3) );
76
77 STATIC_ASSERT( v3 == v4 );
78 STATIC_ASSERT( !(v3 != v4) );
79
80 STATIC_ASSERT( v1 != v5 );
81 STATIC_ASSERT( !(v1 == v5) );
82
83 STATIC_ASSERT( v3 != v5 );
84 STATIC_ASSERT( !(v3 == v5) );
85
86 STATIC_ASSERT( v5 == v6 );
87 STATIC_ASSERT( !(v5 != v6) );
88 }
89
90 {
91 constexpr variant<X> v1, v2;
92
93 STATIC_ASSERT( !(v1 == v2) );
94 STATIC_ASSERT( !(v1 != v2) );
95 }
96 }
97
98 #endif