1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
// { dg-options "-std=gnu++23" }
// { dg-do run { target c++23 } }
#include <expected>
#include <testsuite_hooks.h>
constexpr bool
test_swap()
{
std::expected<int, int> e1(1), e2(2);
std::expected<int, int> e3(std::unexpect, 3), e4(std::unexpect, 4);
swap(e1, e2);
VERIFY( e1.value() == 2 );
VERIFY( e2.value() == 1 );
swap(e1, e3);
VERIFY( ! e1.has_value() );
VERIFY( e1.error() == 3 );
VERIFY( e3.value() == 2 );
swap(e1, e3);
VERIFY( ! e3.has_value() );
VERIFY( e1.value() == 2 );
VERIFY( e3.error() == 3 );
swap(e3, e4);
VERIFY( ! e3.has_value() );
VERIFY( ! e4.has_value() );
VERIFY( e3.error() == 4 );
VERIFY( e4.error() == 3 );
std::expected<int, int> v1(1), v2(2);
std::expected<int, int> v3(std::unexpect, 3), v4(std::unexpect, 4);
swap(v1, v2);
VERIFY( v1.value() == 2 );
VERIFY( v2.value() == 1 );
swap(v1, v3);
VERIFY( ! v1.has_value() );
VERIFY( v1.error() == 3 );
VERIFY( v3.value() == 2 );
swap(v1, v3);
VERIFY( ! v3.has_value() );
VERIFY( v1.value() == 2 );
VERIFY( v3.error() == 3 );
swap(v3, v4);
VERIFY( ! v3.has_value() );
VERIFY( ! v4.has_value() );
VERIFY( v3.error() == 4 );
VERIFY( v4.error() == 3 );
return true;
}
int main()
{
static_assert( test_swap() );
test_swap();
}
|