brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 42a62fa Raw
75 lines · c
1#ifndef TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H2#define TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H3 4#include "test_macros.h"5 6#if TEST_STD_VER >= 117template <class T>8struct EmplaceConstructible {9  T value;10  TEST_CONSTEXPR_CXX14 explicit EmplaceConstructible(T xvalue) : value(xvalue) {}11  EmplaceConstructible(EmplaceConstructible const&) = delete;12};13 14template <class T>15struct EmplaceConstructibleAndMoveInsertable {16  int copied = 0;17  T value;18  TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleAndMoveInsertable(T xvalue) : value(xvalue) {}19 20  TEST_CONSTEXPR_CXX14 EmplaceConstructibleAndMoveInsertable(21      EmplaceConstructibleAndMoveInsertable&& Other)22      : copied(Other.copied + 1), value(std::move(Other.value)) {}23};24 25template <class T>26struct EmplaceConstructibleAndMoveable {27  int copied = 0;28  int assigned = 0;29  T value;30  TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleAndMoveable(T xvalue) noexcept : value(xvalue) {}31 32  TEST_CONSTEXPR_CXX14 EmplaceConstructibleAndMoveable(EmplaceConstructibleAndMoveable&& Other)33      noexcept : copied(Other.copied + 1),34                 value(std::move(Other.value)) {}35 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;42  }43};44 45template <class T>46struct EmplaceConstructibleMoveableAndAssignable {47  int copied = 0;48  int assigned = 0;49  T value;50  TEST_CONSTEXPR_CXX14 explicit EmplaceConstructibleMoveableAndAssignable(T xvalue) noexcept51      : value(xvalue) {}52 53  TEST_CONSTEXPR_CXX14 EmplaceConstructibleMoveableAndAssignable(54      EmplaceConstructibleMoveableAndAssignable&& Other) noexcept55      : copied(Other.copied + 1),56        value(std::move(Other.value)) {}57 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;64  }65 66  TEST_CONSTEXPR_CXX14 EmplaceConstructibleMoveableAndAssignable& operator=(T xvalue) {67    value = std::move(xvalue);68    ++assigned;69    return *this;70  }71};72#endif73 74#endif // TEST_SUPPORT_EMPLACE_CONSTRUCTIBLE_H75