1// Copyright 2017 Peter Dimov.
2// Distributed under the Boost Software License, Version 1.0.
3
4#include <boost/tuple/tuple.hpp>
5#include <boost/core/lightweight_test.hpp>
6#include <boost/config.hpp>
7#include <boost/config/pragma_message.hpp>
8
9#if defined(BOOST_NO_CXX17_STRUCTURED_BINDINGS)
10
11BOOST_PRAGMA_MESSAGE("Skipping structured bindings test, not supported")
12int main() {}
13
14#else
15
16int main()
17{
18 // make_tuple
19
20 {
21 auto [x1] = boost::make_tuple( t0: 1 );
22 BOOST_TEST_EQ( x1, 1 );
23 }
24
25 {
26 auto [x1, x2] = boost::make_tuple( t0: 1, t1: 2 );
27 BOOST_TEST_EQ( x1, 1 );
28 BOOST_TEST_EQ( x2, 2 );
29 }
30
31 {
32 auto [x1, x2, x3] = boost::make_tuple( t0: 1, t1: 2, t2: 3 );
33 BOOST_TEST_EQ( x1, 1 );
34 BOOST_TEST_EQ( x2, 2 );
35 BOOST_TEST_EQ( x3, 3 );
36 }
37
38 {
39 auto [x1, x2, x3, x4] = boost::make_tuple( t0: 1, t1: 2, t2: 3, t3: 4 );
40 BOOST_TEST_EQ( x1, 1 );
41 BOOST_TEST_EQ( x2, 2 );
42 BOOST_TEST_EQ( x3, 3 );
43 BOOST_TEST_EQ( x4, 4 );
44 }
45
46 // tuple
47
48 {
49 auto [x1] = boost::tuple<int>( 1 );
50 BOOST_TEST_EQ( x1, 1 );
51 }
52
53 {
54 auto [x1, x2] = boost::tuple<int, int>( 1, 2 );
55 BOOST_TEST_EQ( x1, 1 );
56 BOOST_TEST_EQ( x2, 2 );
57 }
58
59 {
60 auto [x1, x2, x3] = boost::tuple<int, int, int>( 1, 2, 3 );
61 BOOST_TEST_EQ( x1, 1 );
62 BOOST_TEST_EQ( x2, 2 );
63 BOOST_TEST_EQ( x3, 3 );
64 }
65
66 {
67 auto [x1, x2, x3, x4] = boost::tuple<int, int, int, int>( 1, 2, 3, 4 );
68 BOOST_TEST_EQ( x1, 1 );
69 BOOST_TEST_EQ( x2, 2 );
70 BOOST_TEST_EQ( x3, 3 );
71 BOOST_TEST_EQ( x4, 4 );
72 }
73
74 return boost::report_errors();
75}
76
77#endif
78

source code of boost/libs/tuple/test/structured_bindings.cpp