Skip to content

Commit 8eb48c4

Browse files
committed
address feedback
1 parent 4720f13 commit 8eb48c4

File tree

11 files changed

+249
-184
lines changed

11 files changed

+249
-184
lines changed

libcxx/include/variant

Lines changed: 71 additions & 66 deletions
Large diffs are not rendered by default.

libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ struct NoThrowT {
106106
#endif // !defined(TEST_HAS_NO_EXCEPTIONS)
107107
} // namespace RuntimeHelpers
108108

109-
void test_T_assignment_noexcept() {
109+
constexpr void test_T_assignment_noexcept() {
110110
using namespace MetaHelpers;
111111
{
112112
using V = std::variant<Dummy, NoThrowT>;
@@ -122,7 +122,7 @@ void test_T_assignment_noexcept() {
122122
}
123123
}
124124

125-
void test_T_assignment_sfinae() {
125+
constexpr void test_T_assignment_sfinae() {
126126
{
127127
using V = std::variant<long, long long>;
128128
static_assert(!std::is_assignable<V, int>::value, "ambiguous");
@@ -170,7 +170,7 @@ void test_T_assignment_sfinae() {
170170
#endif // TEST_VARIANT_HAS_NO_REFERENCES
171171
}
172172

173-
TEST_CONSTEXPR_CXX20 bool test_T_assignment_basic() {
173+
TEST_CONSTEXPR_CXX20 void test_T_assignment_basic() {
174174
{
175175
std::variant<int> v(43);
176176
v = 42;
@@ -203,7 +203,6 @@ TEST_CONSTEXPR_CXX20 bool test_T_assignment_basic() {
203203
assert(v.index() == 0);
204204
assert(std::get<0>(v) == "bar");
205205
}
206-
return true;
207206
}
208207

209208
void test_T_assignment_basic_no_constexpr() {
@@ -279,29 +278,37 @@ void test_T_assignment_performs_assignment() {
279278
#endif // TEST_HAS_NO_EXCEPTIONS
280279
}
281280

282-
TEST_CONSTEXPR_CXX20 bool test_T_assignment_vector_bool() {
281+
TEST_CONSTEXPR_CXX20 void test_T_assignment_vector_bool() {
283282
#ifndef _LIBCPP_ENABLE_NARROWING_CONVERSIONS_IN_VARIANT
284283
std::vector<bool> vec = {true};
285284
std::variant<bool, int> v;
286285
v = vec[0];
287286
assert(v.index() == 0);
288287
assert(std::get<0>(v) == true);
289288
#endif
290-
return true;
291289
}
292290

293-
int main(int, char**) {
294-
test_T_assignment_basic();
291+
void non_constexpr_test() {
295292
test_T_assignment_basic_no_constexpr();
296293
test_T_assignment_performs_construction();
297294
test_T_assignment_performs_assignment();
295+
}
296+
297+
TEST_CONSTEXPR_CXX20 bool test() {
298+
test_T_assignment_basic();
298299
test_T_assignment_noexcept();
299300
test_T_assignment_sfinae();
300301
test_T_assignment_vector_bool();
301302

303+
return true;
304+
}
305+
306+
int main(int, char**) {
307+
test();
308+
non_constexpr_test();
309+
302310
#if TEST_STD_VER >= 20
303-
static_assert(test_T_assignment_basic());
304-
static_assert(test_T_assignment_vector_bool());
311+
static_assert(test());
305312
#endif
306313
return 0;
307314
}

libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ void makeEmpty(Variant& v) {
217217
}
218218
#endif // TEST_HAS_NO_EXCEPTIONS
219219

220-
void test_copy_assignment_not_noexcept() {
220+
constexpr void test_copy_assignment_not_noexcept() {
221221
{
222222
using V = std::variant<CopyMaybeThrows>;
223223
static_assert(!std::is_nothrow_copy_assignable<V>::value, "");
@@ -228,7 +228,7 @@ void test_copy_assignment_not_noexcept() {
228228
}
229229
}
230230

231-
void test_copy_assignment_sfinae() {
231+
constexpr void test_copy_assignment_sfinae() {
232232
{
233233
using V = std::variant<int, long>;
234234
static_assert(std::is_copy_assignable<V>::value, "");
@@ -349,7 +349,7 @@ struct Result {
349349
T value;
350350
};
351351

352-
TEST_CONSTEXPR_CXX20 bool test_copy_assignment_same_index() {
352+
TEST_CONSTEXPR_CXX20 void test_copy_assignment_same_index() {
353353
{
354354
using V = std::variant<int>;
355355
V v1(43);
@@ -443,11 +443,9 @@ TEST_CONSTEXPR_CXX20 bool test_copy_assignment_same_index() {
443443
static_assert(result.index == 1, "");
444444
static_assert(result.value == 42, "");
445445
}
446-
447-
return true;
448446
}
449447

450-
TEST_CONSTEXPR_CXX20 bool test_copy_assignment_different_index() {
448+
TEST_CONSTEXPR_CXX20 void test_copy_assignment_different_index() {
451449
{
452450
using V = std::variant<int, long, unsigned>;
453451
V v1(43);
@@ -508,7 +506,6 @@ TEST_CONSTEXPR_CXX20 bool test_copy_assignment_different_index() {
508506
static_assert(result.index == 1, "");
509507
static_assert(result.value == 42, "");
510508
}
511-
return true;
512509
}
513510

514511
void test_assignment_throw() {
@@ -599,7 +596,7 @@ constexpr void test_constexpr_assign_imp(T&& v, ValueType&& new_value) {
599596
assert(std::get<NewIdx>(v) == std::get<NewIdx>(cp));
600597
}
601598

602-
constexpr bool test_constexpr_copy_assignment_trivial() {
599+
constexpr void test_constexpr_copy_assignment_trivial() {
603600
// Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).
604601
using V = std::variant<long, void*, int>;
605602
static_assert(std::is_trivially_copyable<V>::value, "");
@@ -608,8 +605,6 @@ constexpr bool test_constexpr_copy_assignment_trivial() {
608605
test_constexpr_assign_imp<0>(V(nullptr), 101l);
609606
test_constexpr_assign_imp<1>(V(42l), nullptr);
610607
test_constexpr_assign_imp<2>(V(42l), 101);
611-
612-
return true;
613608
}
614609

615610
struct NonTrivialCopyAssign {
@@ -624,7 +619,7 @@ struct NonTrivialCopyAssign {
624619
friend constexpr bool operator==(const NonTrivialCopyAssign& x, const NonTrivialCopyAssign& y) { return x.i == y.i; }
625620
};
626621

627-
constexpr bool test_constexpr_copy_assignment_non_trivial() {
622+
constexpr void test_constexpr_copy_assignment_non_trivial() {
628623
// Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).
629624
using V = std::variant<long, void*, NonTrivialCopyAssign>;
630625
static_assert(!std::is_trivially_copyable<V>::value, "");
@@ -634,28 +629,39 @@ constexpr bool test_constexpr_copy_assignment_non_trivial() {
634629
test_constexpr_assign_imp<1>(V(42l), nullptr);
635630
test_constexpr_assign_imp<2>(V(42l), NonTrivialCopyAssign(5));
636631
test_constexpr_assign_imp<2>(V(NonTrivialCopyAssign(3)), NonTrivialCopyAssign(5));
637-
638-
return true;
639632
}
640633

641-
int main(int, char**) {
634+
void non_constexpr_test() {
642635
test_copy_assignment_empty_empty();
643636
test_copy_assignment_non_empty_empty();
644637
test_copy_assignment_empty_non_empty();
645638
test_assignment_throw();
646-
test_copy_assignment_same_index();
647-
test_copy_assignment_different_index();
639+
}
640+
641+
constexpr bool cxx17_constexpr_test() {
648642
test_copy_assignment_sfinae();
649643
test_copy_assignment_not_noexcept();
650644
test_constexpr_copy_assignment_trivial();
645+
646+
return true;
647+
}
648+
649+
TEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {
650+
test_copy_assignment_same_index();
651+
test_copy_assignment_different_index();
651652
test_constexpr_copy_assignment_non_trivial();
652653

653-
static_assert(test_constexpr_copy_assignment_trivial());
654+
return true;
655+
}
656+
657+
int main(int, char**) {
658+
non_constexpr_test();
659+
cxx17_constexpr_test();
660+
cxx20_constexpr_test();
661+
662+
static_assert(cxx17_constexpr_test());
654663
#if TEST_STD_VER >= 20
655-
static_assert(test_copy_assignment_same_index());
656-
static_assert(test_copy_assignment_different_index());
657-
static_assert(test_constexpr_copy_assignment_non_trivial());
664+
static_assert(cxx20_constexpr_test());
658665
#endif
659-
660666
return 0;
661667
}

libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ struct TrivialCopyNontrivialMove {
132132
static_assert(std::is_trivially_copy_assignable_v<TrivialCopyNontrivialMove>, "");
133133
static_assert(!std::is_trivially_move_assignable_v<TrivialCopyNontrivialMove>, "");
134134

135-
void test_move_assignment_noexcept() {
135+
constexpr void test_move_assignment_noexcept() {
136136
{
137137
using V = std::variant<int>;
138138
static_assert(std::is_nothrow_move_assignable<V>::value, "");
@@ -159,7 +159,7 @@ void test_move_assignment_noexcept() {
159159
}
160160
}
161161

162-
void test_move_assignment_sfinae() {
162+
constexpr void test_move_assignment_sfinae() {
163163
{
164164
using V = std::variant<int, long>;
165165
static_assert(std::is_move_assignable<V>::value, "");
@@ -290,7 +290,7 @@ struct Result {
290290
T value;
291291
};
292292

293-
TEST_CONSTEXPR_CXX20 bool test_move_assignment_same_index() {
293+
TEST_CONSTEXPR_CXX20 void test_move_assignment_same_index() {
294294
{
295295
using V = std::variant<int>;
296296
V v1(43);
@@ -366,11 +366,9 @@ TEST_CONSTEXPR_CXX20 bool test_move_assignment_same_index() {
366366
static_assert(result.index == 1, "");
367367
static_assert(result.value == 42, "");
368368
}
369-
370-
return true;
371369
}
372370

373-
TEST_CONSTEXPR_CXX20 bool test_move_assignment_different_index() {
371+
TEST_CONSTEXPR_CXX20 void test_move_assignment_different_index() {
374372
{
375373
using V = std::variant<int, long, unsigned>;
376374
V v1(43);
@@ -423,8 +421,6 @@ TEST_CONSTEXPR_CXX20 bool test_move_assignment_different_index() {
423421
static_assert(result.index == 1, "");
424422
static_assert(result.value == 42, "");
425423
}
426-
427-
return true;
428424
}
429425

430426
void test_assignment_throw() {
@@ -480,7 +476,7 @@ constexpr void test_constexpr_assign_imp(T&& v, ValueType&& new_value) {
480476
assert(std::get<NewIdx>(v) == std::get<NewIdx>(cp));
481477
}
482478

483-
constexpr bool test_constexpr_move_assignment_trivial() {
479+
constexpr void test_constexpr_move_assignment_trivial() {
484480
// Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).
485481
using V = std::variant<long, void*, int>;
486482
static_assert(std::is_trivially_copyable<V>::value, "");
@@ -489,8 +485,6 @@ constexpr bool test_constexpr_move_assignment_trivial() {
489485
test_constexpr_assign_imp<0>(V(nullptr), 101l);
490486
test_constexpr_assign_imp<1>(V(42l), nullptr);
491487
test_constexpr_assign_imp<2>(V(42l), 101);
492-
493-
return true;
494488
}
495489

496490
struct NonTrivialMoveAssign {
@@ -507,7 +501,7 @@ struct NonTrivialMoveAssign {
507501
friend constexpr bool operator==(const NonTrivialMoveAssign& x, const NonTrivialMoveAssign& y) { return x.i == y.i; }
508502
};
509503

510-
TEST_CONSTEXPR_CXX20 bool test_constexpr_move_assignment_non_trivial() {
504+
TEST_CONSTEXPR_CXX20 void test_constexpr_move_assignment_non_trivial() {
511505
using V = std::variant<long, void*, NonTrivialMoveAssign>;
512506
static_assert(!std::is_trivially_copyable<V>::value);
513507
static_assert(!std::is_trivially_move_assignable<V>::value);
@@ -516,28 +510,39 @@ TEST_CONSTEXPR_CXX20 bool test_constexpr_move_assignment_non_trivial() {
516510
test_constexpr_assign_imp<1>(V(42l), nullptr);
517511
test_constexpr_assign_imp<2>(V(42l), NonTrivialMoveAssign(5));
518512
test_constexpr_assign_imp<2>(V(NonTrivialMoveAssign(3)), NonTrivialMoveAssign(5));
519-
520-
return true;
521513
}
522514

523-
int main(int, char**) {
515+
void non_constexpr_test() {
524516
test_move_assignment_empty_empty();
525517
test_move_assignment_non_empty_empty();
526518
test_move_assignment_empty_non_empty();
527519
test_assignment_throw();
528-
test_move_assignment_same_index();
529-
test_move_assignment_different_index();
520+
}
521+
522+
constexpr bool cxx17_constexpr_test() {
530523
test_move_assignment_sfinae();
531524
test_move_assignment_noexcept();
532-
533525
test_constexpr_move_assignment_trivial();
526+
527+
return true;
528+
}
529+
530+
TEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {
531+
test_move_assignment_same_index();
532+
test_move_assignment_different_index();
534533
test_constexpr_move_assignment_non_trivial();
535534

536-
static_assert(test_constexpr_move_assignment_trivial());
535+
return true;
536+
}
537+
538+
int main(int, char**) {
539+
non_constexpr_test();
540+
cxx17_constexpr_test();
541+
cxx20_constexpr_test();
542+
543+
static_assert(cxx17_constexpr_test());
537544
#if TEST_STD_VER >= 20
538-
static_assert(test_move_assignment_same_index());
539-
static_assert(test_move_assignment_different_index());
540-
static_assert(test_constexpr_move_assignment_non_trivial());
545+
static_assert(cxx20_constexpr_test());
541546
#endif
542547
return 0;
543548
}

0 commit comments

Comments
 (0)