Author: ericwf Date: Thu Aug 11 02:04:14 2016 New Revision: 278319 URL: http://llvm.org/viewvc/llvm-project?rev=278319&view=rev Log: Refactor test archetypes implementation.
Added: libcxx/trunk/test/support/archetypes.ipp Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/U_V.pass.cpp libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp libcxx/trunk/test/support/archetypes.hpp Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/U_V.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/U_V.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/U_V.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/U_V.pass.cpp Thu Aug 11 02:04:14 2016 @@ -22,6 +22,7 @@ #include "archetypes.hpp" #include "test_convertible.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes template <class T1, class T1Arg, bool CanCopy = true, bool CanConvert = CanCopy> @@ -58,20 +59,20 @@ int main() // Test non-const lvalue and rvalue types test_sfinae<AllCtors, AllCtors&>(); test_sfinae<AllCtors, AllCtors&&>(); - test_sfinae<ExplicitAllCtors, ExplicitAllCtors&, true, false>(); - test_sfinae<ExplicitAllCtors, ExplicitAllCtors&&, true, false>(); + test_sfinae<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&, true, false>(); + test_sfinae<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&&, true, false>(); test_sfinae<CopyOnly, CopyOnly&>(); test_sfinae<CopyOnly, CopyOnly&&>(); - test_sfinae<ExplicitCopyOnly, ExplicitCopyOnly&, true, false>(); - test_sfinae<ExplicitCopyOnly, ExplicitCopyOnly&&, true, false>(); + test_sfinae<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&, true, false>(); + test_sfinae<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&&, true, false>(); test_sfinae<MoveOnly, MoveOnly&, false>(); test_sfinae<MoveOnly, MoveOnly&&>(); - test_sfinae<ExplicitMoveOnly, ExplicitMoveOnly&, false>(); - test_sfinae<ExplicitMoveOnly, ExplicitMoveOnly&&, true, false>(); + test_sfinae<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&, false>(); + test_sfinae<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&&, true, false>(); test_sfinae<NonCopyable, NonCopyable&, false>(); test_sfinae<NonCopyable, NonCopyable&&, false>(); - test_sfinae<ExplicitNonCopyable, ExplicitNonCopyable&, false>(); - test_sfinae<ExplicitNonCopyable, ExplicitNonCopyable&&, false>(); + test_sfinae<ExplicitTypes::NonCopyable, ExplicitTypes::NonCopyable&, false>(); + test_sfinae<ExplicitTypes::NonCopyable, ExplicitTypes::NonCopyable&&, false>(); } { // Test converting types @@ -79,10 +80,10 @@ int main() test_sfinae<ConvertingType, const int&>(); test_sfinae<ConvertingType, int&&>(); test_sfinae<ConvertingType, const int&&>(); - test_sfinae<ExplicitConvertingType, int&, true, false>(); - test_sfinae<ExplicitConvertingType, const int&, true, false>(); - test_sfinae<ExplicitConvertingType, int&&, true, false>(); - test_sfinae<ExplicitConvertingType, const int&&, true, false>(); + test_sfinae<ExplicitTypes::ConvertingType, int&, true, false>(); + test_sfinae<ExplicitTypes::ConvertingType, const int&, true, false>(); + test_sfinae<ExplicitTypes::ConvertingType, int&&, true, false>(); + test_sfinae<ExplicitTypes::ConvertingType, const int&&, true, false>(); } #if TEST_STD_VER > 11 { // explicit constexpr test Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp Thu Aug 11 02:04:14 2016 @@ -20,6 +20,7 @@ #include "archetypes.hpp" #include "test_convertible.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes struct ExplicitT { constexpr explicit ExplicitT(int x) : value(x) {} @@ -62,13 +63,13 @@ int main() } { test_sfinae<AllCtors>(); - test_sfinae<ExplicitAllCtors, true, false>(); + test_sfinae<ExplicitTypes::AllCtors, true, false>(); test_sfinae<CopyOnly>(); - test_sfinae<ExplicitCopyOnly, true, false>(); + test_sfinae<ExplicitTypes::CopyOnly, true, false>(); test_sfinae<MoveOnly, false>(); - test_sfinae<ExplicitMoveOnly, false>(); + test_sfinae<ExplicitTypes::MoveOnly, false>(); test_sfinae<NonCopyable, false>(); - test_sfinae<ExplicitNonCopyable, false>(); + test_sfinae<ExplicitTypes::NonCopyable, false>(); } #if TEST_STD_VER > 11 { Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp Thu Aug 11 02:04:14 2016 @@ -20,6 +20,7 @@ #include "archetypes.hpp" #include "test_convertible.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes template <class T1, class U1, bool CanCopy = true, bool CanConvert = CanCopy> @@ -79,27 +80,27 @@ int main() test_pair_const<AllCtors, const AllCtors&>(); test_pair_const<AllCtors, const AllCtors&&>(); - test_pair_const<ExplicitAllCtors, ExplicitAllCtors>(); // copy construction - test_pair_const<ExplicitAllCtors, ExplicitAllCtors&, true, false>(); - test_pair_const<ExplicitAllCtors, ExplicitAllCtors&&, true, false>(); - test_pair_const<ExplicitAllCtors, const ExplicitAllCtors&, true, false>(); - test_pair_const<ExplicitAllCtors, const ExplicitAllCtors&&, true, false>(); + test_pair_const<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors>(); // copy construction + test_pair_const<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&, true, false>(); + test_pair_const<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&&, true, false>(); + test_pair_const<ExplicitTypes::AllCtors, const ExplicitTypes::AllCtors&, true, false>(); + test_pair_const<ExplicitTypes::AllCtors, const ExplicitTypes::AllCtors&&, true, false>(); test_pair_const<MoveOnly, MoveOnly, false>(); // copy construction test_pair_const<MoveOnly, MoveOnly&, false>(); test_pair_const<MoveOnly, MoveOnly&&, false>(); - test_pair_const<ExplicitMoveOnly, ExplicitMoveOnly, false>(); // copy construction - test_pair_const<ExplicitMoveOnly, ExplicitMoveOnly&, false>(); - test_pair_const<ExplicitMoveOnly, ExplicitMoveOnly&&, false>(); + test_pair_const<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly, false>(); // copy construction + test_pair_const<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&, false>(); + test_pair_const<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&&, false>(); test_pair_const<CopyOnly, CopyOnly>(); test_pair_const<CopyOnly, CopyOnly&>(); test_pair_const<CopyOnly, CopyOnly&&>(); - test_pair_const<ExplicitCopyOnly, ExplicitCopyOnly>(); - test_pair_const<ExplicitCopyOnly, ExplicitCopyOnly&, true, false>(); - test_pair_const<ExplicitCopyOnly, ExplicitCopyOnly&&, true, false>(); + test_pair_const<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly>(); + test_pair_const<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&, true, false>(); + test_pair_const<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&&, true, false>(); test_pair_const<NonCopyable, NonCopyable, false>(); test_pair_const<NonCopyable, NonCopyable&, false>(); @@ -116,23 +117,23 @@ int main() test_pair_const<NonCopyable&&, NonCopyable&&, false>(); test_pair_const<ConvertingType&, int, false>(); - test_pair_const<ExplicitConvertingType&, int, false>(); + test_pair_const<ExplicitTypes::ConvertingType&, int, false>(); // Unfortunately the below conversions are allowed and create dangling // references. //test_pair_const<ConvertingType&&, int>(); //test_pair_const<ConvertingType const&, int>(); //test_pair_const<ConvertingType const&&, int>(); // But these are not because the converting constructor is explicit. - test_pair_const<ExplicitConvertingType&&, int, false>(); - test_pair_const<ExplicitConvertingType const&, int, false>(); - test_pair_const<ExplicitConvertingType const&&, int, false>(); + test_pair_const<ExplicitTypes::ConvertingType&&, int, false>(); + test_pair_const<ExplicitTypes::ConvertingType const&, int, false>(); + test_pair_const<ExplicitTypes::ConvertingType const&&, int, false>(); } { test_pair_const<AllCtors, int, false>(); - test_pair_const<ExplicitAllCtors, int, false>(); + test_pair_const<ExplicitTypes::AllCtors, int, false>(); test_pair_const<ConvertingType, int>(); - test_pair_const<ExplicitConvertingType, int, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, int, true, false>(); test_pair_const<ConvertingType, int>(); test_pair_const<ConvertingType, ConvertingType>(); @@ -140,16 +141,16 @@ int main() test_pair_const<ConvertingType, ConvertingType&>(); test_pair_const<ConvertingType, ConvertingType&&>(); - test_pair_const<ExplicitConvertingType, int, true, false>(); - test_pair_const<ExplicitConvertingType, int&, true, false>(); - test_pair_const<ExplicitConvertingType, const int&, true, false>(); - test_pair_const<ExplicitConvertingType, int&&, true, false>(); - test_pair_const<ExplicitConvertingType, const int&&, true, false>(); - - test_pair_const<ExplicitConvertingType, ExplicitConvertingType>(); - test_pair_const<ExplicitConvertingType, ExplicitConvertingType const&, true, false>(); - test_pair_const<ExplicitConvertingType, ExplicitConvertingType&, true, false>(); - test_pair_const<ExplicitConvertingType, ExplicitConvertingType&&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, int, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, int&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, const int&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, int&&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, const int&&, true, false>(); + + test_pair_const<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType>(); + test_pair_const<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType const&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType&, true, false>(); + test_pair_const<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType&&, true, false>(); } #if TEST_STD_VER > 11 { Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp Thu Aug 11 02:04:14 2016 @@ -28,6 +28,7 @@ #include "test_macros.h" #include "archetypes.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes int main() { Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp Thu Aug 11 02:04:14 2016 @@ -21,6 +21,7 @@ #include "archetypes.hpp" #include "test_convertible.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes template <class T1, class U1, bool CanCopy = true, bool CanConvert = CanCopy> @@ -89,27 +90,27 @@ int main() test_pair_rv<AllCtors, const AllCtors&>(); test_pair_rv<AllCtors, const AllCtors&&>(); - test_pair_rv<ExplicitAllCtors, ExplicitAllCtors>(); - test_pair_rv<ExplicitAllCtors, ExplicitAllCtors&, true, false>(); - test_pair_rv<ExplicitAllCtors, ExplicitAllCtors&&, true, false>(); - test_pair_rv<ExplicitAllCtors, const ExplicitAllCtors&, true, false>(); - test_pair_rv<ExplicitAllCtors, const ExplicitAllCtors&&, true, false>(); + test_pair_rv<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors>(); + test_pair_rv<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&, true, false>(); + test_pair_rv<ExplicitTypes::AllCtors, ExplicitTypes::AllCtors&&, true, false>(); + test_pair_rv<ExplicitTypes::AllCtors, const ExplicitTypes::AllCtors&, true, false>(); + test_pair_rv<ExplicitTypes::AllCtors, const ExplicitTypes::AllCtors&&, true, false>(); test_pair_rv<MoveOnly, MoveOnly>(); test_pair_rv<MoveOnly, MoveOnly&, false>(); test_pair_rv<MoveOnly, MoveOnly&&>(); - test_pair_rv<ExplicitMoveOnly, ExplicitMoveOnly>(); // copy construction - test_pair_rv<ExplicitMoveOnly, ExplicitMoveOnly&, false>(); - test_pair_rv<ExplicitMoveOnly, ExplicitMoveOnly&&, true, false>(); + test_pair_rv<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly>(); // copy construction + test_pair_rv<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&, false>(); + test_pair_rv<ExplicitTypes::MoveOnly, ExplicitTypes::MoveOnly&&, true, false>(); test_pair_rv<CopyOnly, CopyOnly>(); test_pair_rv<CopyOnly, CopyOnly&>(); test_pair_rv<CopyOnly, CopyOnly&&>(); - test_pair_rv<ExplicitCopyOnly, ExplicitCopyOnly>(); - test_pair_rv<ExplicitCopyOnly, ExplicitCopyOnly&, true, false>(); - test_pair_rv<ExplicitCopyOnly, ExplicitCopyOnly&&, true, false>(); + test_pair_rv<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly>(); + test_pair_rv<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&, true, false>(); + test_pair_rv<ExplicitTypes::CopyOnly, ExplicitTypes::CopyOnly&&, true, false>(); test_pair_rv<NonCopyable, NonCopyable, false>(); test_pair_rv<NonCopyable, NonCopyable&, false>(); @@ -125,22 +126,22 @@ int main() test_pair_rv<NonCopyable&&, NonCopyable&&>(); test_pair_rv<ConvertingType&, int, false>(); - test_pair_rv<ExplicitConvertingType&, int, false>(); + test_pair_rv<ExplicitTypes::ConvertingType&, int, false>(); // Unfortunately the below conversions are allowed and create dangling // references. //test_pair_rv<ConvertingType&&, int>(); //test_pair_rv<ConvertingType const&, int>(); //test_pair_rv<ConvertingType const&&, int>(); // But these are not because the converting constructor is explicit. - test_pair_rv<ExplicitConvertingType&&, int, false>(); - test_pair_rv<ExplicitConvertingType const&, int, false>(); - test_pair_rv<ExplicitConvertingType const&&, int, false>(); + test_pair_rv<ExplicitTypes::ConvertingType&&, int, false>(); + test_pair_rv<ExplicitTypes::ConvertingType const&, int, false>(); + test_pair_rv<ExplicitTypes::ConvertingType const&&, int, false>(); } { test_pair_rv<AllCtors, int, false>(); - test_pair_rv<ExplicitAllCtors, int, false>(); + test_pair_rv<ExplicitTypes::AllCtors, int, false>(); test_pair_rv<ConvertingType, int>(); - test_pair_rv<ExplicitConvertingType, int, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, int, true, false>(); test_pair_rv<ConvertingType, int>(); test_pair_rv<ConvertingType, ConvertingType>(); @@ -148,16 +149,16 @@ int main() test_pair_rv<ConvertingType, ConvertingType&>(); test_pair_rv<ConvertingType, ConvertingType&&>(); - test_pair_rv<ExplicitConvertingType, int, true, false>(); - test_pair_rv<ExplicitConvertingType, int&, true, false>(); - test_pair_rv<ExplicitConvertingType, const int&, true, false>(); - test_pair_rv<ExplicitConvertingType, int&&, true, false>(); - test_pair_rv<ExplicitConvertingType, const int&&, true, false>(); - - test_pair_rv<ExplicitConvertingType, ExplicitConvertingType>(); - test_pair_rv<ExplicitConvertingType, ExplicitConvertingType const&, true, false>(); - test_pair_rv<ExplicitConvertingType, ExplicitConvertingType&, true, false>(); - test_pair_rv<ExplicitConvertingType, ExplicitConvertingType&&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, int, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, int&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, const int&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, int&&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, const int&&, true, false>(); + + test_pair_rv<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType>(); + test_pair_rv<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType const&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType&, true, false>(); + test_pair_rv<ExplicitTypes::ConvertingType, ExplicitTypes::ConvertingType&&, true, false>(); } #if TEST_STD_VER > 11 { // explicit constexpr test Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/special_member_generation_test.pass.cpp Thu Aug 11 02:04:14 2016 @@ -26,6 +26,7 @@ #include <tuple> #include "archetypes.hpp" +using namespace ImplicitTypes; // Get implicitly archetypes namespace ConstructorTest { Modified: libcxx/trunk/test/support/archetypes.hpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/archetypes.hpp?rev=278319&r1=278318&r2=278319&view=diff ============================================================================== --- libcxx/trunk/test/support/archetypes.hpp (original) +++ libcxx/trunk/test/support/archetypes.hpp Thu Aug 11 02:04:14 2016 @@ -5,105 +5,32 @@ #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; -}; +//============================================================================// +// Trivial Implicit Test Types +namespace ImplicitTypes { +#include "archetypes.ipp" +} + +//============================================================================// +// Trivial Explicit Test Types +namespace ExplicitTypes { +#define DEFINE_EXPLICIT explicit +#include "archetypes.ipp" +} + +//============================================================================// +// Non-Trivial Implicit Test Types +namespace NonLiteralTypes { +#define DEFINE_DTOR(Name) ~Name() {} +#include "archetypes.ipp" +} + +//============================================================================// +// Non-Trivially Copyable Implicit Test Types +namespace NonTrivialTypes { +#define DEFINE_CTOR {} +#include "archetypes.ipp" +} #endif // TEST_STD_VER >= 11 Added: libcxx/trunk/test/support/archetypes.ipp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/archetypes.ipp?rev=278319&view=auto ============================================================================== --- libcxx/trunk/test/support/archetypes.ipp (added) +++ libcxx/trunk/test/support/archetypes.ipp Thu Aug 11 02:04:14 2016 @@ -0,0 +1,109 @@ + +#ifndef DEFINE_EXPLICIT +#define DEFINE_EXPLICIT +#endif +#ifndef DEFINE_CTOR +#define DEFINE_CTOR = default +#endif +#ifndef DEFINE_ASSIGN +#define DEFINE_ASSIGN = default +#endif +#ifndef DEFINE_DTOR +#define DEFINE_DTOR(Name) +#endif + +struct NoDefault { + DEFINE_EXPLICIT NoDefault() = delete; + DEFINE_DTOR(NoDefault) +}; + +struct AllCtors { + DEFINE_EXPLICIT AllCtors() DEFINE_CTOR; + DEFINE_EXPLICIT AllCtors(AllCtors const&) DEFINE_CTOR; + DEFINE_EXPLICIT AllCtors(AllCtors &&) DEFINE_CTOR; + AllCtors& operator=(AllCtors const&) DEFINE_ASSIGN; + AllCtors& operator=(AllCtors &&) DEFINE_ASSIGN; + DEFINE_DTOR(AllCtors) +}; + +struct Copyable { + DEFINE_EXPLICIT Copyable() DEFINE_CTOR; + DEFINE_EXPLICIT Copyable(Copyable const &) DEFINE_CTOR; + Copyable &operator=(Copyable const &) DEFINE_ASSIGN; + DEFINE_DTOR(Copyable) +}; + +struct CopyOnly { + DEFINE_EXPLICIT CopyOnly() DEFINE_CTOR; + DEFINE_EXPLICIT CopyOnly(CopyOnly const &) DEFINE_CTOR; + DEFINE_EXPLICIT CopyOnly(CopyOnly &&) = delete; + CopyOnly &operator=(CopyOnly const &) DEFINE_ASSIGN; + CopyOnly &operator=(CopyOnly &&) = delete; + DEFINE_DTOR(CopyOnly) +}; + +struct NonCopyable { + DEFINE_EXPLICIT NonCopyable() DEFINE_CTOR; + DEFINE_EXPLICIT NonCopyable(NonCopyable const &) = delete; + NonCopyable &operator=(NonCopyable const &) = delete; + DEFINE_DTOR(NonCopyable) +}; + +struct MoveOnly { + DEFINE_EXPLICIT MoveOnly() DEFINE_CTOR; + DEFINE_EXPLICIT MoveOnly(MoveOnly &&) DEFINE_CTOR; + MoveOnly &operator=(MoveOnly &&) DEFINE_ASSIGN; + DEFINE_DTOR(MoveOnly) +}; + +struct CopyAssignable { + DEFINE_EXPLICIT CopyAssignable() = delete; + CopyAssignable& operator=(CopyAssignable const&) DEFINE_ASSIGN; + DEFINE_DTOR(CopyAssignable) +}; + +struct CopyAssignOnly { + DEFINE_EXPLICIT CopyAssignOnly() = delete; + CopyAssignOnly& operator=(CopyAssignOnly const&) DEFINE_ASSIGN; + CopyAssignOnly& operator=(CopyAssignOnly &&) = delete; + DEFINE_DTOR(CopyAssignOnly) +}; + +struct MoveAssignOnly { + DEFINE_EXPLICIT MoveAssignOnly() = delete; + MoveAssignOnly& operator=(MoveAssignOnly const&) = delete; + MoveAssignOnly& operator=(MoveAssignOnly &&) DEFINE_ASSIGN; + DEFINE_DTOR(MoveAssignOnly) +}; + +struct ConvertingType { + DEFINE_EXPLICIT ConvertingType() DEFINE_CTOR; + DEFINE_EXPLICIT ConvertingType(ConvertingType const&) DEFINE_CTOR; + DEFINE_EXPLICIT ConvertingType(ConvertingType &&) DEFINE_CTOR; + ConvertingType& operator=(ConvertingType const&) DEFINE_ASSIGN; + ConvertingType& operator=(ConvertingType &&) DEFINE_ASSIGN; + template <class ...Args> + DEFINE_EXPLICIT ConvertingType(Args&&...) {} + template <class Arg> + ConvertingType& operator=(Arg&&) { return *this; } + DEFINE_DTOR(ConvertingType) +}; + +template <template <class...> class List> +using ApplyTypes = List< + NoDefault, + AllCtors, + Copyable, + CopyOnly, + NonCopyable, + MoveOnly, + CopyAssignable, + CopyAssignOnly, + MoveAssignOnly, + ConvertingType + >; + +#undef DEFINE_EXPLICIT +#undef DEFINE_CTOR +#undef DEFINE_ASSIGN +#undef DEFINE_DTOR _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits