]>
gcc.gnu.org Git - gcc.git/blob - libstdc++-v3/testsuite/20_util/expected/swap.cc
1 // { dg-options "-std=gnu++23" }
2 // { dg-do run { target c++23 } }
5 #include <testsuite_hooks.h>
9 constexpr NonTrivial(int i
) : i(i
) { }
10 constexpr NonTrivial(const NonTrivial
& x
) noexcept(false): i(x
.i
) { }
11 constexpr ~NonTrivial() { }
14 constexpr bool operator==(const NonTrivial
&) const = default;
20 std::expected
<int, int> e1(1), e2(2);
21 std::expected
<int, int> e3(std::unexpect
, 3), e4(std::unexpect
, 4);
24 VERIFY( e1
.value() == 2 );
25 VERIFY( e2
.value() == 1 );
27 VERIFY( ! e1
.has_value() );
28 VERIFY( e1
.error() == 3 );
29 VERIFY( e3
.value() == 2 );
31 VERIFY( ! e3
.has_value() );
32 VERIFY( e1
.value() == 2 );
33 VERIFY( e3
.error() == 3 );
35 VERIFY( ! e3
.has_value() );
36 VERIFY( ! e4
.has_value() );
37 VERIFY( e3
.error() == 4 );
38 VERIFY( e4
.error() == 3 );
40 std::expected
<int, NonTrivial
> e5(1), e6(2);
41 std::expected
<int, NonTrivial
> e7(std::unexpect
, 3), e8(std::unexpect
, 4);
44 VERIFY( e5
.value() == 2 );
45 VERIFY( e6
.value() == 1 );
47 VERIFY( ! e5
.has_value() );
48 VERIFY( e5
.error() == 3 );
49 VERIFY( e7
.value() == 2 );
51 VERIFY( ! e7
.has_value() );
52 VERIFY( e5
.value() == 2 );
53 VERIFY( e7
.error() == 3 );
55 VERIFY( ! e7
.has_value() );
56 VERIFY( ! e8
.has_value() );
57 VERIFY( e7
.error() == 4 );
58 VERIFY( e8
.error() == 3 );
60 std::expected
<NonTrivial
, int> e9(1), e10(2);
61 std::expected
<NonTrivial
, int> e11(std::unexpect
, 3), e12(std::unexpect
, 4);
64 VERIFY( e9
.value() == 2 );
65 VERIFY( e10
.value() == 1 );
67 VERIFY( ! e9
.has_value() );
68 VERIFY( e9
.error() == 3 );
69 VERIFY( e11
.value() == 2 );
71 VERIFY( ! e11
.has_value() );
72 VERIFY( e9
.value() == 2 );
73 VERIFY( e11
.error() == 3 );
75 VERIFY( ! e11
.has_value() );
76 VERIFY( ! e12
.has_value() );
77 VERIFY( e11
.error() == 4 );
78 VERIFY( e12
.error() == 3 );
86 std::expected
<void, int> v1
, v2
;
87 std::expected
<void, int> v3(std::unexpect
, 3), v4(std::unexpect
, 4);
90 VERIFY( v1
.has_value() );
91 VERIFY( v2
.has_value() );
93 VERIFY( ! v1
.has_value() );
94 VERIFY( v1
.error() == 3 );
95 VERIFY( v3
.has_value() );
97 VERIFY( ! v3
.has_value() );
98 VERIFY( v1
.has_value() );
99 VERIFY( v3
.error() == 3 );
101 VERIFY( ! v3
.has_value() );
102 VERIFY( ! v4
.has_value() );
103 VERIFY( v3
.error() == 4 );
104 VERIFY( v4
.error() == 3 );
106 std::expected
<void, NonTrivial
> v5
, v6
;
107 std::expected
<void, NonTrivial
> v7(std::unexpect
, 3), v8(std::unexpect
, 4);
110 VERIFY( v5
.has_value() );
111 VERIFY( v6
.has_value() );
113 VERIFY( ! v5
.has_value() );
114 VERIFY( v5
.error() == 3 );
115 VERIFY( v7
.has_value() );
117 VERIFY( ! v7
.has_value() );
118 VERIFY( v5
.has_value() );
119 VERIFY( v7
.error() == 3 );
121 VERIFY( ! v7
.has_value() );
122 VERIFY( ! v8
.has_value() );
123 VERIFY( v7
.error() == 4 );
124 VERIFY( v8
.error() == 3 );
129 static_assert( std::is_swappable_v
<std::expected
<int, int>> );
130 static_assert( std::is_swappable_v
<std::expected
<void, int>> );
132 struct A
{ A
& operator=(A
&&) = delete; };
133 static_assert( ! std::is_swappable_v
<std::expected
<A
, int>> );
134 static_assert( ! std::is_swappable_v
<std::expected
<int, A
>> );
135 static_assert( ! std::is_swappable_v
<std::expected
<void, A
>> );
139 static_assert( test_swap_obj() );
141 static_assert( test_swap_void() );
This page took 0.041555 seconds and 5 git commands to generate.