]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/variant2/test/variant_destroy.cpp
2 // Copyright 2017 Peter Dimov.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
9 #include <boost/variant2/variant.hpp>
10 #include <boost/core/lightweight_test.hpp>
11 #include <boost/core/lightweight_test_trait.hpp>
12 #include <type_traits>
16 using namespace boost::variant2
;
24 X1(): v(0) { ++instances
; }
25 explicit X1(int v
): v(v
) { ++instances
; }
26 X1(X1
const& r
): v(r
.v
) { ++instances
; }
27 X1(X1
&& r
): v(r
.v
) { ++instances
; }
29 ~X1() noexcept
{ --instances
; }
31 X1
& operator=( X1
const& r
) { v
= r
.v
; return *this; }
32 X1
& operator=( X1
&& r
) { v
= r
.v
; return *this; }
35 int X1::instances
= 0;
43 X2(): v(0) { ++instances
; }
44 explicit X2(int v
): v(v
) { ++instances
; }
45 X2(X2
const& r
): v(r
.v
) { ++instances
; }
46 X2(X2
&& r
): v(r
.v
) { ++instances
; }
48 ~X2() noexcept
{ --instances
; }
50 X2
& operator=( X2
const& r
) { v
= r
.v
; return *this; }
51 X2
& operator=( X2
&& r
) { v
= r
.v
; return *this; }
54 int X2::instances
= 0;
62 Y1() noexcept
: v(0) { ++instances
; }
63 explicit Y1(int v
) noexcept
: v(v
) { ++instances
; }
64 Y1(Y1
const& r
) noexcept
: v(r
.v
) { ++instances
; }
65 Y1(Y1
&& r
) noexcept
: v(r
.v
) { ++instances
; }
67 ~Y1() noexcept
{ --instances
; }
69 Y1
& operator=( Y1
const& r
) noexcept
{ v
= r
.v
; return *this; }
70 Y1
& operator=( Y1
&& r
) noexcept
{ v
= r
.v
; return *this; }
73 int Y1::instances
= 0;
81 Y2() noexcept
: v(0) { ++instances
; }
82 explicit Y2(int v
) noexcept
: v(v
) { ++instances
; }
83 Y2(Y2
const& r
) noexcept
: v(r
.v
) { ++instances
; }
84 Y2(Y2
&& r
) noexcept
: v(r
.v
) { ++instances
; }
86 ~Y2() noexcept
{ --instances
; }
88 Y2
& operator=( Y2
const& r
) noexcept
{ v
= r
.v
; return *this; }
89 Y2
& operator=( Y2
&& r
) noexcept
{ v
= r
.v
; return *this; }
92 int Y2::instances
= 0;
96 BOOST_TEST_EQ( Y1::instances
, 0 );
100 BOOST_TEST_EQ( Y1::instances
, 1 );
104 BOOST_TEST_EQ( Y1::instances
, 2 );
107 BOOST_TEST_EQ( Y1::instances
, 2 );
110 BOOST_TEST_EQ( Y1::instances
, 1 );
113 BOOST_TEST_EQ( Y1::instances
, 1 );
116 BOOST_TEST_EQ( Y1::instances
, 0 );
117 BOOST_TEST_EQ( Y2::instances
, 0 );
122 BOOST_TEST_EQ( Y1::instances
, 1 );
123 BOOST_TEST_EQ( Y2::instances
, 0 );
127 BOOST_TEST_EQ( Y1::instances
, 2 );
128 BOOST_TEST_EQ( Y2::instances
, 0 );
131 BOOST_TEST_EQ( Y1::instances
, 2 );
132 BOOST_TEST_EQ( Y2::instances
, 0 );
135 BOOST_TEST_EQ( Y1::instances
, 1 );
136 BOOST_TEST_EQ( Y2::instances
, 1 );
139 BOOST_TEST_EQ( Y1::instances
, 0 );
140 BOOST_TEST_EQ( Y2::instances
, 2 );
143 BOOST_TEST_EQ( Y1::instances
, 0 );
144 BOOST_TEST_EQ( Y2::instances
, 1 );
148 BOOST_TEST_EQ( Y1::instances
, 1 );
149 BOOST_TEST_EQ( Y2::instances
, 0 );
153 BOOST_TEST_EQ( Y1::instances
, 0 );
154 BOOST_TEST_EQ( Y2::instances
, 1 );
157 BOOST_TEST_EQ( Y1::instances
, 0 );
158 BOOST_TEST_EQ( Y2::instances
, 0 );
160 BOOST_TEST_EQ( X1::instances
, 0 );
161 BOOST_TEST_EQ( X2::instances
, 0 );
166 BOOST_TEST_EQ( X1::instances
, 1 );
167 BOOST_TEST_EQ( X2::instances
, 0 );
171 BOOST_TEST_EQ( X1::instances
, 2 );
172 BOOST_TEST_EQ( X2::instances
, 0 );
175 BOOST_TEST_EQ( X1::instances
, 2 );
176 BOOST_TEST_EQ( X2::instances
, 0 );
179 BOOST_TEST_EQ( X1::instances
, 1 );
180 BOOST_TEST_EQ( X2::instances
, 1 );
183 BOOST_TEST_EQ( X1::instances
, 0 );
184 BOOST_TEST_EQ( X2::instances
, 2 );
187 BOOST_TEST_EQ( X1::instances
, 0 );
188 BOOST_TEST_EQ( X2::instances
, 1 );
192 BOOST_TEST_EQ( X1::instances
, 1 );
193 BOOST_TEST_EQ( X2::instances
, 0 );
197 BOOST_TEST_EQ( X1::instances
, 0 );
198 BOOST_TEST_EQ( X2::instances
, 1 );
201 BOOST_TEST_EQ( X1::instances
, 0 );
202 BOOST_TEST_EQ( X2::instances
, 0 );
204 return boost::report_errors();