@@ -16,7 +16,21 @@ TEST(Get, IndexLvalue) {
1616 ASSERT_SAME (decltype (rsl::get<1 >(v)), long &);
1717 ASSERT_EQ (rsl::get<1 >(v), 42l );
1818 }
19+
20+ using variant_const = rsl::variant<const int , long >;
21+ {
22+ constexpr variant_const obj (42 );
23+ ASSERT_NOT_NOEXCEPT (rsl::get<0 >(obj));
24+ ASSERT_SAME (decltype (rsl::get<0 >(obj)), const int &);
25+ static_assert (rsl::get<0 >(obj) == 42 , " Value mismatch" );
26+ }
27+ {
28+ variant_const v (42l );
29+ ASSERT_SAME (decltype (rsl::get<1 >(v)), long &);
30+ ASSERT_EQ (rsl::get<1 >(v), 42l );
31+ }
1932}
33+
2034TEST (Get, IndexRvalue) {
2135 using variant = rsl::variant<int , long >;
2236 {
@@ -30,6 +44,18 @@ TEST(Get, IndexRvalue) {
3044 ASSERT_SAME (decltype (rsl::get<1 >(std::move (v))), long &&);
3145 ASSERT_EQ (rsl::get<1 >(std::move (v)), 42l );
3246 }
47+ using variant_const = rsl::variant<const int , long >;
48+ {
49+ variant_const v (42 );
50+ ASSERT_NOT_NOEXCEPT (rsl::get<0 >(std::move (v)));
51+ ASSERT_SAME (decltype (rsl::get<0 >(std::move (v))), int &&);
52+ ASSERT_EQ (rsl::get<0 >(std::move (v)), 42 );
53+ }
54+ {
55+ variant_const v (42l );
56+ ASSERT_SAME (decltype (rsl::get<1 >(std::move (v))), long &&);
57+ ASSERT_EQ (rsl::get<1 >(std::move (v)), 42l );
58+ }
3359}
3460
3561TEST (Get, IndexConstLvalue) {
@@ -58,6 +84,32 @@ TEST(Get, IndexConstLvalue) {
5884 ASSERT_SAME (decltype (rsl::get<1 >(v)), const long &);
5985 ASSERT_EQ (rsl::get<1 >(v), 42 );
6086 }
87+
88+ using variant_const = rsl::variant<const int , long >;
89+ {
90+ constexpr variant_const v (42 );
91+ ASSERT_NOT_NOEXCEPT (rsl::get<0 >(v));
92+ ASSERT_SAME (decltype (rsl::get<0 >(v)), const int &);
93+ static_assert (rsl::get<0 >(v) == 42 , " " );
94+ }
95+ {
96+ const variant_const v (42 );
97+ ASSERT_NOT_NOEXCEPT (rsl::get<0 >(v));
98+ ASSERT_SAME (decltype (rsl::get<0 >(v)), const int &);
99+ ASSERT_EQ (rsl::get<0 >(v), 42 );
100+ }
101+ {
102+ constexpr variant_const v (42l );
103+ ASSERT_NOT_NOEXCEPT (rsl::get<1 >(v));
104+ ASSERT_SAME (decltype (rsl::get<1 >(v)), const long &);
105+ static_assert (rsl::get<1 >(v) == 42 , " " );
106+ }
107+ {
108+ const variant_const v (42l );
109+ ASSERT_NOT_NOEXCEPT (rsl::get<1 >(v));
110+ ASSERT_SAME (decltype (rsl::get<1 >(v)), const long &);
111+ ASSERT_EQ (rsl::get<1 >(v), 42 );
112+ }
61113}
62114
63115TEST (Get, IndexConstRvalue) {
@@ -73,6 +125,19 @@ TEST(Get, IndexConstRvalue) {
73125 ASSERT_SAME (decltype (rsl::get<1 >(std::move (v))), const long &&);
74126 ASSERT_EQ (rsl::get<1 >(std::move (v)), 42 );
75127 }
128+
129+ using variant_const = rsl::variant<const int , long >;
130+ {
131+ const variant_const v (42 );
132+ ASSERT_NOT_NOEXCEPT (rsl::get<0 >(std::move (v)));
133+ ASSERT_SAME (decltype (rsl::get<0 >(std::move (v))), const int &&);
134+ ASSERT_EQ (rsl::get<0 >(std::move (v)), 42 );
135+ }
136+ {
137+ const variant_const v (42l );
138+ ASSERT_SAME (decltype (rsl::get<1 >(std::move (v))), const long &&);
139+ ASSERT_EQ (rsl::get<1 >(std::move (v)), 42 );
140+ }
76141}
77142
78143TEST (Get, IndexException) {
@@ -108,6 +173,27 @@ TEST(Get, TypeLvalue) {
108173 ASSERT_EQ (rsl::get<long >(v), 42 );
109174 ASSERT_EQ (rsl::get<const long &>(v), 42 );
110175 }
176+
177+ using variant_const = rsl::variant<const int , long >;
178+ {
179+ variant_const v (42 );
180+ ASSERT_NOT_NOEXCEPT (rsl::get<int >(v));
181+ ASSERT_SAME (decltype (rsl::get<int >(v)), int &);
182+ ASSERT_SAME (decltype (rsl::get<int &>(v)), int &);
183+ ASSERT_SAME (decltype (rsl::get<const int &>(v)), int &);
184+ ASSERT_SAME (decltype (rsl::get<int &&>(v)), int &);
185+ ASSERT_EQ (rsl::get<int >(v), 42 );
186+ ASSERT_EQ (rsl::get<int &>(v), 42 );
187+ ASSERT_EQ (rsl::get<const int &>(v), 42 );
188+ ASSERT_EQ (rsl::get<int &&>(v), 42 );
189+ }
190+ {
191+ variant_const v (42l );
192+ ASSERT_SAME (decltype (rsl::get<long >(v)), long &);
193+ ASSERT_SAME (decltype (rsl::get<const long &>(v)), long &);
194+ ASSERT_EQ (rsl::get<long >(v), 42 );
195+ ASSERT_EQ (rsl::get<const long &>(v), 42 );
196+ }
111197}
112198
113199TEST (Get, TypeRvalue) {
@@ -146,6 +232,22 @@ TEST(Get, TypeConstRvalue) {
146232 ASSERT_SAME (decltype (rsl::get<long >(std::move (v))), const long &&);
147233 ASSERT_EQ (rsl::get<long >(std::move (v)), 42 );
148234 }
235+ using variant_const = rsl::variant<const int , long >;
236+ {
237+ const variant_const v (42 );
238+ ASSERT_NOT_NOEXCEPT (rsl::get<int >(std::move (v)));
239+ ASSERT_SAME (decltype (rsl::get<int >(std::move (v))), const int &&);
240+ ASSERT_SAME (decltype (rsl::get<const int &>(std::move (v))), const int &&);
241+ ASSERT_SAME (decltype (rsl::get<const int &&>(std::move (v))), const int &&);
242+ ASSERT_EQ (rsl::get<int >(std::move (v)), 42 );
243+ ASSERT_EQ (rsl::get<const int &>(std::move (v)), 42 );
244+ ASSERT_EQ (rsl::get<const int &&>(std::move (v)), 42 );
245+ }
246+ {
247+ const variant_const v (42l );
248+ ASSERT_SAME (decltype (rsl::get<long >(std::move (v))), const long &&);
249+ ASSERT_EQ (rsl::get<long >(std::move (v)), 42 );
250+ }
149251}
150252
151253TEST (Get, TypeConstLvalue) {
@@ -177,4 +279,32 @@ TEST(Get, TypeConstLvalue) {
177279 ASSERT_SAME (decltype (rsl::get<long >(v)), const long &);
178280 ASSERT_EQ (rsl::get<long >(v), 42 );
179281 }
282+ using variant_const = rsl::variant<const int , long >;
283+ {
284+ constexpr variant_const v (42 );
285+ ASSERT_NOT_NOEXCEPT (rsl::get<int >(v));
286+ ASSERT_SAME (decltype (rsl::get<int >(v)), const int &);
287+ ASSERT_SAME (decltype (rsl::get<int &>(v)), const int &);
288+ ASSERT_SAME (decltype (rsl::get<const int &>(v)), const int &);
289+ ASSERT_SAME (decltype (rsl::get<int &&>(v)), const int &);
290+ static_assert (rsl::get<int >(v) == 42 , " " );
291+ }
292+ {
293+ const variant_const v (42 );
294+ ASSERT_NOT_NOEXCEPT (rsl::get<int >(v));
295+ ASSERT_SAME (decltype (rsl::get<int >(v)), const int &);
296+ ASSERT_EQ (rsl::get<int >(v), 42 );
297+ }
298+ {
299+ constexpr variant_const v (42l );
300+ ASSERT_NOT_NOEXCEPT (rsl::get<long >(v));
301+ ASSERT_SAME (decltype (rsl::get<long >(v)), const long &);
302+ static_assert (rsl::get<long >(v) == 42 , " " );
303+ }
304+ {
305+ const variant_const v (42l );
306+ ASSERT_NOT_NOEXCEPT (rsl::get<long >(v));
307+ ASSERT_SAME (decltype (rsl::get<long >(v)), const long &);
308+ ASSERT_EQ (rsl::get<long >(v), 42 );
309+ }
180310}
0 commit comments