diff options
| author | Eric Fiselier <eric@efcs.ca> | 2016-07-25 04:32:07 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2016-07-25 04:32:07 +0000 |
| commit | 4927c295777f49ad518a809a85dc31c3e250680f (patch) | |
| tree | aa377dd8e9381c527153006a8dccd2316c2dfded /libcxx/test/support | |
| parent | 126de5d4b45d9fa2c55eaba761103cccd3113468 (diff) | |
| download | bcm5719-llvm-4927c295777f49ad518a809a85dc31c3e250680f.tar.gz bcm5719-llvm-4927c295777f49ad518a809a85dc31c3e250680f.zip | |
Implement the std::pair parts of "Improving pair and tuple". Completes N4387.
llvm-svn: 276605
Diffstat (limited to 'libcxx/test/support')
| -rw-r--r-- | libcxx/test/support/archetypes.hpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/libcxx/test/support/archetypes.hpp b/libcxx/test/support/archetypes.hpp new file mode 100644 index 00000000000..d5b6bcbf4c2 --- /dev/null +++ b/libcxx/test/support/archetypes.hpp @@ -0,0 +1,110 @@ +#ifndef TEST_SUPPORT_ARCHETYPES_HPP +#define TEST_SUPPORT_ARCHETYPES_HPP + +#include "test_macros.h" + +#if TEST_STD_VER >= 11 + +struct NoDefault { + NoDefault() = delete; +}; + +// Implicit copy/move types + +struct AllCtors { + AllCtors() = default; + AllCtors(AllCtors const&) = default; + AllCtors(AllCtors &&) = default; + AllCtors& operator=(AllCtors const&) = default; + AllCtors& operator=(AllCtors &&) = default; +}; + +struct Copyable { + Copyable() = default; + Copyable(Copyable const &) = default; + Copyable &operator=(Copyable const &) = default; +}; + +struct CopyOnly { + CopyOnly() = default; + CopyOnly(CopyOnly const &) = default; + CopyOnly &operator=(CopyOnly const &) = default; + CopyOnly(CopyOnly &&) = delete; + CopyOnly &operator=(CopyOnly &&) = delete; +}; + +struct NonCopyable { + NonCopyable() = default; + NonCopyable(NonCopyable const &) = delete; + NonCopyable &operator=(NonCopyable const &) = delete; +}; + +struct MoveOnly { + MoveOnly() = default; + MoveOnly(MoveOnly &&) = default; + MoveOnly &operator=(MoveOnly &&) = default; +}; + +struct ConvertingType { + ConvertingType() = default; + ConvertingType(ConvertingType const&) = default; + ConvertingType(ConvertingType &&) = default; + ConvertingType& operator=(ConvertingType const&) = default; + ConvertingType& operator=(ConvertingType &&) = default; + template <class ...Args> + ConvertingType(Args&&...) {} + template <class Arg> + ConvertingType& operator=(Arg&&) { return *this; } +}; + +struct ExplicitConvertingType { + ExplicitConvertingType() = default; + explicit ExplicitConvertingType(ExplicitConvertingType const&) = default; + explicit ExplicitConvertingType(ExplicitConvertingType &&) = default; + ExplicitConvertingType& operator=(ExplicitConvertingType const&) = default; + ExplicitConvertingType& operator=(ExplicitConvertingType &&) = default; + template <class ...Args> + explicit ExplicitConvertingType(Args&&...) {} + template <class Arg> + ExplicitConvertingType& operator=(Arg&&) { return *this; } +}; + +// Explicit copy/move types + +struct ExplicitAllCtors { + explicit ExplicitAllCtors() = default; + explicit ExplicitAllCtors(ExplicitAllCtors const&) = default; + explicit ExplicitAllCtors(ExplicitAllCtors &&) = default; + ExplicitAllCtors& operator=(ExplicitAllCtors const&) = default; + ExplicitAllCtors& operator=(ExplicitAllCtors &&) = default; +}; + +struct ExplicitCopyable { + explicit ExplicitCopyable() = default; + explicit ExplicitCopyable(ExplicitCopyable const &) = default; + ExplicitCopyable &operator=(ExplicitCopyable const &) = default; +}; + +struct ExplicitCopyOnly { + explicit ExplicitCopyOnly() = default; + explicit ExplicitCopyOnly(ExplicitCopyOnly const &) = default; + ExplicitCopyOnly &operator=(ExplicitCopyOnly const &) = default; + explicit ExplicitCopyOnly(ExplicitCopyOnly &&) = delete; + ExplicitCopyOnly &operator=(ExplicitCopyOnly &&) = delete; +}; + +struct ExplicitNonCopyable { + explicit ExplicitNonCopyable() = default; + explicit ExplicitNonCopyable(ExplicitNonCopyable const &) = delete; + ExplicitNonCopyable &operator=(ExplicitNonCopyable const &) = delete; +}; + +struct ExplicitMoveOnly { + explicit ExplicitMoveOnly() = default; + explicit ExplicitMoveOnly(ExplicitMoveOnly &&) = default; + ExplicitMoveOnly &operator=(ExplicitMoveOnly &&) = default; +}; + +#endif // TEST_STD_VER >= 11 + +#endif // TEST_SUPPORT_ARCHETYPES_HPP |

