Skip to content

Commit 31efb09

Browse files
committed
address format
1 parent 1eea9ef commit 31efb09

File tree

2 files changed

+146
-17
lines changed
  • libcxx

2 files changed

+146
-17
lines changed

libcxx/include/variant

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ namespace std {
6262
constexpr variant_alternative_t<I, variant>& emplace(Args&&...); // constexpr since c++20
6363
6464
template <size_t I, class U, class... Args>
65-
constexpr variant_alternative_t<I, variant>&
65+
constexpr variant_alternative_t<I, variant>&
6666
emplace(initializer_list<U>, Args&&...); // constexpr since c++20
6767
6868
// 20.7.2.5, value status
@@ -673,7 +673,7 @@ union _LIBCPP_TEMPLATE_VIS __union;
673673
template <_Trait _DestructibleTrait, size_t _Index>
674674
union _LIBCPP_TEMPLATE_VIS __union<_DestructibleTrait, _Index> {};
675675

676-
# define _LIBCPP_VARIANT_UNION(destructible_trait, destructor) \
676+
# define _LIBCPP_VARIANT_UNION(destructible_trait, destructor_definition) \
677677
template <size_t _Index, class _Tp, class... _Types> \
678678
union _LIBCPP_TEMPLATE_VIS __union<destructible_trait, _Index, _Tp, _Types...> { \
679679
public: \
@@ -691,7 +691,7 @@ union _LIBCPP_TEMPLATE_VIS __union<_DestructibleTrait, _Index> {};
691691
_LIBCPP_HIDE_FROM_ABI __union(__union&&) = default; \
692692
_LIBCPP_HIDE_FROM_ABI __union& operator=(const __union&) = default; \
693693
_LIBCPP_HIDE_FROM_ABI __union& operator=(__union&&) = default; \
694-
destructor \
694+
destructor_definition \
695695
\
696696
private : char __dummy; \
697697
__alt<_Index, _Tp> __head; \
@@ -746,7 +746,7 @@ protected:
746746
template <class _Traits, _Trait = _Traits::__destructible_trait>
747747
class _LIBCPP_TEMPLATE_VIS __dtor;
748748

749-
# define _LIBCPP_VARIANT_DESTRUCTOR(destructible_trait, destructor, destroy) \
749+
# define _LIBCPP_VARIANT_DESTRUCTOR(destructible_trait, destructor_definition, destroy) \
750750
template <class... _Types> \
751751
class _LIBCPP_TEMPLATE_VIS __dtor<__traits<_Types...>, destructible_trait> \
752752
: public __base<destructible_trait, _Types...> { \
@@ -760,7 +760,7 @@ class _LIBCPP_TEMPLATE_VIS __dtor;
760760
_LIBCPP_HIDE_FROM_ABI __dtor(__dtor&&) = default; \
761761
_LIBCPP_HIDE_FROM_ABI __dtor& operator=(const __dtor&) = default; \
762762
_LIBCPP_HIDE_FROM_ABI __dtor& operator=(__dtor&&) = default; \
763-
destructor \
763+
destructor_definition \
764764
\
765765
protected : destroy \
766766
}
@@ -821,7 +821,7 @@ protected:
821821
template <class _Traits, _Trait = _Traits::__move_constructible_trait>
822822
class _LIBCPP_TEMPLATE_VIS __move_constructor;
823823

824-
# define _LIBCPP_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, move_constructor) \
824+
# define _LIBCPP_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, move_constructor_definition) \
825825
template <class... _Types> \
826826
class _LIBCPP_TEMPLATE_VIS __move_constructor<__traits<_Types...>, move_constructible_trait> \
827827
: public __ctor<__traits<_Types...>> { \
@@ -835,7 +835,7 @@ class _LIBCPP_TEMPLATE_VIS __move_constructor;
835835
_LIBCPP_HIDE_FROM_ABI ~__move_constructor() = default; \
836836
_LIBCPP_HIDE_FROM_ABI __move_constructor& operator=(const __move_constructor&) = default; \
837837
_LIBCPP_HIDE_FROM_ABI __move_constructor& operator=(__move_constructor&&) = default; \
838-
move_constructor \
838+
move_constructor_definition \
839839
}
840840

841841
_LIBCPP_VARIANT_MOVE_CONSTRUCTOR(
@@ -857,7 +857,7 @@ _LIBCPP_VARIANT_MOVE_CONSTRUCTOR(
857857
template <class _Traits, _Trait = _Traits::__copy_constructible_trait>
858858
class _LIBCPP_TEMPLATE_VIS __copy_constructor;
859859

860-
# define _LIBCPP_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, copy_constructor) \
860+
# define _LIBCPP_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, copy_constructor_definition) \
861861
template <class... _Types> \
862862
class _LIBCPP_TEMPLATE_VIS __copy_constructor<__traits<_Types...>, copy_constructible_trait> \
863863
: public __move_constructor<__traits<_Types...>> { \
@@ -871,7 +871,7 @@ class _LIBCPP_TEMPLATE_VIS __copy_constructor;
871871
_LIBCPP_HIDE_FROM_ABI ~__copy_constructor() = default; \
872872
_LIBCPP_HIDE_FROM_ABI __copy_constructor& operator=(const __copy_constructor&) = default; \
873873
_LIBCPP_HIDE_FROM_ABI __copy_constructor& operator=(__copy_constructor&&) = default; \
874-
copy_constructor \
874+
copy_constructor_definition \
875875
}
876876

877877
_LIBCPP_VARIANT_COPY_CONSTRUCTOR(_Trait::_TriviallyAvailable,
@@ -946,7 +946,7 @@ protected:
946946
template <class _Traits, _Trait = _Traits::__move_assignable_trait>
947947
class _LIBCPP_TEMPLATE_VIS __move_assignment;
948948

949-
# define _LIBCPP_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, move_assignment) \
949+
# define _LIBCPP_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, move_assignment_definition) \
950950
template <class... _Types> \
951951
class _LIBCPP_TEMPLATE_VIS __move_assignment<__traits<_Types...>, move_assignable_trait> \
952952
: public __assignment<__traits<_Types...>> { \
@@ -960,7 +960,7 @@ class _LIBCPP_TEMPLATE_VIS __move_assignment;
960960
_LIBCPP_HIDE_FROM_ABI __move_assignment(__move_assignment&&) = default; \
961961
_LIBCPP_HIDE_FROM_ABI ~__move_assignment() = default; \
962962
_LIBCPP_HIDE_FROM_ABI __move_assignment& operator=(const __move_assignment&) = default; \
963-
move_assignment \
963+
move_assignment_definition \
964964
}
965965

966966
_LIBCPP_VARIANT_MOVE_ASSIGNMENT(_Trait::_TriviallyAvailable,
@@ -985,7 +985,7 @@ _LIBCPP_VARIANT_MOVE_ASSIGNMENT(
985985
template <class _Traits, _Trait = _Traits::__copy_assignable_trait>
986986
class _LIBCPP_TEMPLATE_VIS __copy_assignment;
987987

988-
# define _LIBCPP_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, copy_assignment) \
988+
# define _LIBCPP_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, copy_assignment_definition) \
989989
template <class... _Types> \
990990
class _LIBCPP_TEMPLATE_VIS __copy_assignment<__traits<_Types...>, copy_assignable_trait> \
991991
: public __move_assignment<__traits<_Types...>> { \
@@ -999,7 +999,7 @@ class _LIBCPP_TEMPLATE_VIS __copy_assignment;
999999
_LIBCPP_HIDE_FROM_ABI __copy_assignment(__copy_assignment&&) = default; \
10001000
_LIBCPP_HIDE_FROM_ABI ~__copy_assignment() = default; \
10011001
_LIBCPP_HIDE_FROM_ABI __copy_assignment& operator=(__copy_assignment&&) = default; \
1002-
copy_assignment \
1002+
copy_assignment_definition \
10031003
}
10041004

10051005
_LIBCPP_VARIANT_COPY_ASSIGNMENT(_Trait::_TriviallyAvailable,

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

Lines changed: 133 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,134 @@ void test_T_assignment_basic_no_constexpr() {
212212
assert(std::get<1>(v) == nullptr);
213213
}
214214

215-
void test_T_assignment_performs_construction() {
215+
struct TraceStat {
216+
int construct = 0;
217+
int copy_construct = 0;
218+
int copy_assign = 0;
219+
int move_construct = 0;
220+
int move_assign = 0;
221+
int T_copy_assign = 0;
222+
int T_move_assign = 0;
223+
int destroy = 0;
224+
};
225+
226+
template <bool CtorNoexcept, bool MoveCtorNoexcept>
227+
struct Trace {
228+
struct T {};
229+
230+
constexpr Trace(TraceStat* s) noexcept(CtorNoexcept) : stat(s) { ++s->construct; }
231+
constexpr Trace(T) noexcept(CtorNoexcept) : stat(nullptr) {}
232+
constexpr Trace(const Trace& o) : stat(o.stat) { ++stat->copy_construct; }
233+
constexpr Trace(Trace&& o) noexcept(MoveCtorNoexcept) : stat(o.stat) { ++stat->move_construct; }
234+
constexpr Trace& operator=(const Trace&) {
235+
++stat->copy_assign;
236+
return *this;
237+
}
238+
constexpr Trace& operator=(Trace&&) noexcept {
239+
++stat->move_assign;
240+
return *this;
241+
}
242+
243+
constexpr Trace& operator=(const T&) {
244+
++stat->T_copy_assign;
245+
return *this;
246+
}
247+
constexpr Trace& operator=(T&&) noexcept {
248+
++stat->T_move_assign;
249+
return *this;
250+
}
251+
TEST_CONSTEXPR_CXX20 ~Trace() { ++stat->destroy; }
252+
253+
TraceStat* stat;
254+
};
255+
256+
TEST_CONSTEXPR_CXX20 void test_T_assignment_performs_construction() {
257+
{
258+
using V = std::variant<int, Trace<false, false>>;
259+
TraceStat stat;
260+
V v{1};
261+
v = &stat;
262+
assert(stat.construct == 1);
263+
assert(stat.copy_construct == 0);
264+
assert(stat.move_construct == 0);
265+
assert(stat.copy_assign == 0);
266+
assert(stat.move_assign == 0);
267+
assert(stat.destroy == 0);
268+
}
269+
270+
{
271+
using V = std::variant<int, Trace<false, true>>;
272+
TraceStat stat;
273+
V v{1};
274+
v = &stat;
275+
assert(stat.construct == 1);
276+
assert(stat.copy_construct == 0);
277+
assert(stat.move_construct == 1);
278+
assert(stat.copy_assign == 0);
279+
assert(stat.move_assign == 0);
280+
assert(stat.destroy == 1);
281+
}
282+
283+
{
284+
using V = std::variant<int, Trace<true, false>>;
285+
TraceStat stat;
286+
V v{1};
287+
v = &stat;
288+
assert(stat.construct == 1);
289+
assert(stat.copy_construct == 0);
290+
assert(stat.move_construct == 0);
291+
assert(stat.copy_assign == 0);
292+
assert(stat.move_assign == 0);
293+
assert(stat.destroy == 0);
294+
}
295+
296+
{
297+
using V = std::variant<int, Trace<true, true>>;
298+
TraceStat stat;
299+
V v{1};
300+
v = &stat;
301+
assert(stat.construct == 1);
302+
assert(stat.copy_construct == 0);
303+
assert(stat.move_construct == 0);
304+
assert(stat.copy_assign == 0);
305+
assert(stat.move_assign == 0);
306+
assert(stat.destroy == 0);
307+
}
308+
}
309+
310+
TEST_CONSTEXPR_CXX20 void test_T_assignment_performs_assignment() {
311+
{
312+
using V = std::variant<int, Trace<false, false>>;
313+
TraceStat stat;
314+
V v{&stat};
315+
v = Trace<false, false>::T{};
316+
assert(stat.construct == 1);
317+
assert(stat.copy_construct == 0);
318+
assert(stat.move_construct == 0);
319+
assert(stat.copy_assign == 0);
320+
assert(stat.move_assign == 0);
321+
assert(stat.T_copy_assign == 0);
322+
assert(stat.T_move_assign == 1);
323+
assert(stat.destroy == 0);
324+
}
325+
{
326+
using V = std::variant<int, Trace<false, false>>;
327+
TraceStat stat;
328+
V v{&stat};
329+
Trace<false, false>::T t;
330+
v = t;
331+
assert(stat.construct == 1);
332+
assert(stat.copy_construct == 0);
333+
assert(stat.move_construct == 0);
334+
assert(stat.copy_assign == 0);
335+
assert(stat.move_assign == 0);
336+
assert(stat.T_copy_assign == 1);
337+
assert(stat.T_move_assign == 0);
338+
assert(stat.destroy == 0);
339+
}
340+
}
341+
342+
void test_T_assignment_performs_construction_throw() {
216343
using namespace RuntimeHelpers;
217344
#ifndef TEST_HAS_NO_EXCEPTIONS
218345
{
@@ -236,7 +363,7 @@ void test_T_assignment_performs_construction() {
236363
#endif // TEST_HAS_NO_EXCEPTIONS
237364
}
238365

239-
void test_T_assignment_performs_assignment() {
366+
void test_T_assignment_performs_assignment_throw() {
240367
using namespace RuntimeHelpers;
241368
#ifndef TEST_HAS_NO_EXCEPTIONS
242369
{
@@ -290,12 +417,14 @@ TEST_CONSTEXPR_CXX20 void test_T_assignment_vector_bool() {
290417

291418
void non_constexpr_test() {
292419
test_T_assignment_basic_no_constexpr();
293-
test_T_assignment_performs_construction();
294-
test_T_assignment_performs_assignment();
420+
test_T_assignment_performs_construction_throw();
421+
test_T_assignment_performs_assignment_throw();
295422
}
296423

297424
TEST_CONSTEXPR_CXX20 bool test() {
298425
test_T_assignment_basic();
426+
test_T_assignment_performs_construction();
427+
test_T_assignment_performs_assignment();
299428
test_T_assignment_noexcept();
300429
test_T_assignment_sfinae();
301430
test_T_assignment_vector_bool();

0 commit comments

Comments
 (0)