[NFC][Py Reformat] Reformat python files in libcxx/libcxxabi
[llvm-project.git] / libcxx / test / support / emplace_constructible.h
blob42a62fabe656d517d6055edf2b88f2c288ba5dc8
1 #ifndef TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H
2 #define TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H
4 #include "test_macros.h"
6 #if TEST_STD_VER >= 11
7 template <class T>
8 struct EmplaceConstructible {
9 T value;
10 TEST_CONSTEXPR_CXX14 explicit EmplaceConstructible(T xvalue) : value(xvalue) {}
11 EmplaceConstructible(EmplaceConstructible const&) = delete;
14 template <class T>
15 struct EmplaceConstructibleAndMoveInsertable {
16 int copied = 0;
17 T value;
18 TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleAndMoveInsertable(T xvalue) : value(xvalue) {}
20 TEST_CONSTEXPR_CXX14 EmplaceConstructibleAndMoveInsertable(
21 EmplaceConstructibleAndMoveInsertable&& Other)
22 : copied(Other.copied + 1), value(std::move(Other.value)) {}
25 template <class T>
26 struct EmplaceConstructibleAndMoveable {
27 int copied = 0;
28 int assigned = 0;
29 T value;
30 TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleAndMoveable(T xvalue) noexcept : value(xvalue) {}
32 TEST_CONSTEXPR_CXX14 EmplaceConstructibleAndMoveable(EmplaceConstructibleAndMoveable&& Other)
33 noexcept : copied(Other.copied + 1),
34 value(std::move(Other.value)) {}
36 TEST_CONSTEXPR_CXX14 EmplaceConstructibleAndMoveable&
37 operator=(EmplaceConstructibleAndMoveable&& Other) noexcept {
38 copied = Other.copied;
39 assigned = Other.assigned + 1;
40 value = std::move(Other.value);
41 return *this;
45 template <class T>
46 struct EmplaceConstructibleMoveableAndAssignable {
47 int copied = 0;
48 int assigned = 0;
49 T value;
50 TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleMoveableAndAssignable(T xvalue) noexcept
51 : value(xvalue) {}
53 TEST_CONSTEXPR_CXX14 EmplaceConstructibleMoveableAndAssignable(
54 EmplaceConstructibleMoveableAndAssignable&& Other) noexcept
55 : copied(Other.copied + 1),
56 value(std::move(Other.value)) {}
58 TEST_CONSTEXPR_CXX14 EmplaceConstructibleMoveableAndAssignable&
59 operator=(EmplaceConstructibleMoveableAndAssignable&& Other) noexcept {
60 copied = Other.copied;
61 assigned = Other.assigned + 1;
62 value = std::move(Other.value);
63 return *this;
66 TEST_CONSTEXPR_CXX14 EmplaceConstructibleMoveableAndAssignable& operator=(T xvalue) {
67 value = std::move(xvalue);
68 ++assigned;
69 return *this;
72 #endif
74 #endif // TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H