From 933afa9761c1c1f916161278a99284d50a594939 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Thu, 4 Jul 2013 00:10:01 +0000 Subject: [PATCH] Patch for N3655 (Transformation type traits) with Howard's additions git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@185597 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/type_traits | 151 ++++++- .../meta/meta.rel/is_convertible.pass.cpp | 405 +++++------------- .../remove_all_extents.pass.cpp | 33 +- .../meta.trans.arr/remove_extent.pass.cpp | 34 +- .../meta.trans.cv/add_const.pass.cpp | 3 + .../meta.trans/meta.trans.cv/add_cv.pass.cpp | 3 + .../meta.trans.cv/add_volatile.pass.cpp | 3 + .../meta.trans.cv/remove_const.pass.cpp | 3 + .../meta.trans.cv/remove_cv.pass.cpp | 3 + .../meta.trans.cv/remove_volatile.pass.cpp | 3 + .../meta.trans.other/aligned_storage.pass.cpp | 63 +++ .../meta.trans.other/aligned_union.pass.cpp | 27 ++ .../meta.trans.other/common_type.pass.cpp | 12 + .../meta.trans.other/conditional.pass.cpp | 4 + .../meta.trans.other/decay.pass.cpp | 3 + .../meta.trans.other/enable_if.pass.cpp | 4 + .../meta.trans.other/enable_if2.fail.cpp | 23 + .../meta.trans.other/result_of.pass.cpp | 30 ++ .../meta.trans.other/underlying_type.pass.cpp | 14 +- .../meta.trans.ptr/add_pointer.pass.cpp | 3 + .../meta.trans.ptr/remove_pointer.pass.cpp | 3 + .../meta.trans.ref/add_lvalue_ref.pass.cpp | 3 + .../meta.trans.ref/add_rvalue_ref.pass.cpp | 3 + .../meta.trans.ref/remove_ref.pass.cpp | 3 + .../meta.trans.sign/make_signed.pass.cpp | 40 +- .../meta.trans.sign/make_unsigned.pass.cpp | 41 +- .../meta.unary.comp/rvalue_ref.pass.cpp | 2 +- .../meta.unary.prop/is_assignable.pass.cpp | 37 +- .../meta.unary.prop/is_constructible.pass.cpp | 57 ++- .../is_copy_assignable.pass.cpp | 41 +- .../is_copy_constructible.pass.cpp | 42 +- .../is_default_constructible.pass.cpp | 51 ++- .../meta.unary.prop/is_destructible.pass.cpp | 48 ++- .../meta.unary.prop/is_literal_type.pass.cpp | 25 +- .../is_move_assignable.pass.cpp | 37 +- .../is_move_constructible.pass.cpp | 42 +- .../is_nothrow_assignable.pass.cpp | 29 +- .../is_nothrow_constructible.pass.cpp | 45 +- .../is_nothrow_copy_assignable.pass.cpp | 35 +- .../is_nothrow_destructible.pass.cpp | 8 + .../is_nothrow_move_assignable.pass.cpp | 32 +- .../meta.unary.prop/is_polymorphic.pass.cpp | 5 + .../is_standard_layout.pass.cpp | 28 +- .../meta.unary.prop/is_trivial.pass.cpp | 29 +- .../is_trivialially_copyable.pass.cpp | 35 +- .../is_trivially_assignable.pass.cpp | 27 +- .../is_trivially_constructible.pass.cpp | 41 +- .../is_trivially_copy_assignable.pass.cpp | 39 +- .../is_trivially_move_assignable.pass.cpp | 37 +- 49 files changed, 1105 insertions(+), 584 deletions(-) create mode 100644 test/utilities/meta/meta.trans/meta.trans.other/enable_if2.fail.cpp diff --git a/include/type_traits b/include/type_traits index 4997b4b1..450b5928 100644 --- a/include/type_traits +++ b/include/type_traits @@ -137,6 +137,64 @@ namespace std template class result_of; // undefined template class result_of; + // const-volatile modifications: + template + using remove_const_t = typename remove_const::type; // C++14 + template + using remove_volatile_t = typename remove_volatile::type; // C++14 + template + using remove_cv_t = typename remove_cv::type; // C++14 + template + using add_const_t = typename add_const::type; // C++14 + template + using add_volatile_t = typename add_volatile::type; // C++14 + template + using add_cv_t = typename add_cv::type; // C++14 + + // reference modifications: + template + using remove_reference_t = typename remove_reference::type; // C++14 + template + using add_lvalue_reference_t = typename add_lvalue_reference::type; // C++14 + template + using add_rvalue_reference_t = typename add_rvalue_reference::type; // C++14 + + // sign modifications: + template + using make_signed_t = typename make_signed::type; // C++14 + template + using make_unsigned_t = typename make_unsigned::type; // C++14 + + // array modifications: + template + using remove_extent_t = typename remove_extent::type; // C++14 + template + using remove_all_extents_t = typename remove_all_extents::type; // C++14 + + // pointer modifications: + template + using remove_pointer_t = typename remove_pointer::type; // C++14 + template + using add_pointer_t = typename add_pointer::type; // C++14 + + // other transformations: + template + using aligned_storage_t = typename aligned_storage::type; // C++14 + template + using aligned_union_t = typename aligned_union::type; // C++14 + template + using decay_t = typename decay::type; // C++14 + template + using enable_if_t = typename enable_if::type; // C++14 + template + using conditional_t = typename conditional::type; // C++14 + template + using common_type_t = typename common_type::type; // C++14 + template + using underlying_type_t = typename underlying_type::type; // C++14 + template + using result_of_t = typename result_of::type; // C++14 + } // std */ @@ -154,9 +212,18 @@ template template struct _LIBCPP_TYPE_VIS conditional {typedef _Then type;}; +#if _LIBCPP_STD_VER > 11 +template using conditional_t = typename conditional<_Bp, _If, _Then>::type; +#endif + template struct _LIBCPP_TYPE_VIS enable_if {}; template struct _LIBCPP_TYPE_VIS enable_if {typedef _Tp type;}; +#if _LIBCPP_STD_VER > 11 +template using enable_if_t = typename enable_if<_Bp, _Tp>::type; +#endif + + struct __two {char __lx[2];}; // helper class: @@ -191,16 +258,25 @@ template struct _LIBCPP_TYPE_VIS is_volatile<_Tp volatile> : public template struct _LIBCPP_TYPE_VIS remove_const {typedef _Tp type;}; template struct _LIBCPP_TYPE_VIS remove_const {typedef _Tp type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_const_t = typename remove_const<_Tp>::type; +#endif // remove_volatile template struct _LIBCPP_TYPE_VIS remove_volatile {typedef _Tp type;}; template struct _LIBCPP_TYPE_VIS remove_volatile {typedef _Tp type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_volatile_t = typename remove_volatile<_Tp>::type; +#endif // remove_cv template struct _LIBCPP_TYPE_VIS remove_cv {typedef typename remove_volatile::type>::type type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_cv_t = typename remove_cv<_Tp>::type; +#endif // is_void @@ -446,6 +522,10 @@ struct __add_const<_Tp, false> {typedef const _Tp type;}; template struct _LIBCPP_TYPE_VIS add_const {typedef typename __add_const<_Tp>::type type;}; +#if _LIBCPP_STD_VER > 11 +template using add_const_t = typename add_const<_Tp>::type; +#endif + // add_volatile template ::value || @@ -459,11 +539,19 @@ struct __add_volatile<_Tp, false> {typedef volatile _Tp type;}; template struct _LIBCPP_TYPE_VIS add_volatile {typedef typename __add_volatile<_Tp>::type type;}; +#if _LIBCPP_STD_VER > 11 +template using add_volatile_t = typename add_volatile<_Tp>::type; +#endif + // add_cv template struct _LIBCPP_TYPE_VIS add_cv {typedef typename add_const::type>::type type;}; +#if _LIBCPP_STD_VER > 11 +template using add_cv_t = typename add_cv<_Tp>::type; +#endif + // remove_reference template struct _LIBCPP_TYPE_VIS remove_reference {typedef _Tp type;}; @@ -472,6 +560,10 @@ template struct _LIBCPP_TYPE_VIS remove_reference<_Tp&> {typedef _T template struct _LIBCPP_TYPE_VIS remove_reference<_Tp&&> {typedef _Tp type;}; #endif +#if _LIBCPP_STD_VER > 11 +template using remove_reference_t = typename remove_reference<_Tp>::type; +#endif + // add_lvalue_reference template struct _LIBCPP_TYPE_VIS add_lvalue_reference {typedef _Tp& type;}; @@ -481,6 +573,10 @@ template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference {typedef volatile void type;}; template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference {typedef const volatile void type;}; +#if _LIBCPP_STD_VER > 11 +template using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; +#endif + #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template struct _LIBCPP_TYPE_VIS add_rvalue_reference {typedef _Tp&& type;}; @@ -489,6 +585,10 @@ template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference {typedef volatile void type;}; template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference {typedef const volatile void type;}; +#if _LIBCPP_STD_VER > 11 +template using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; +#endif + #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES @@ -518,11 +618,19 @@ template struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* const> template struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* volatile> {typedef _Tp type;}; template struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* const volatile> {typedef _Tp type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_pointer_t = typename remove_pointer<_Tp>::type; +#endif + // add_pointer template struct _LIBCPP_TYPE_VIS add_pointer {typedef typename remove_reference<_Tp>::type* type;}; +#if _LIBCPP_STD_VER > 11 +template using add_pointer_t = typename add_pointer<_Tp>::type; +#endif + // is_signed template ::value> @@ -584,6 +692,10 @@ template struct _LIBCPP_TYPE_VIS remove_extent<_Tp[]> template struct _LIBCPP_TYPE_VIS remove_extent<_Tp[_Np]> {typedef _Tp type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_extent_t = typename remove_extent<_Tp>::type; +#endif + // remove_all_extents template struct _LIBCPP_TYPE_VIS remove_all_extents @@ -593,6 +705,10 @@ template struct _LIBCPP_TYPE_VIS remove_all_extents<_Tp[]> template struct _LIBCPP_TYPE_VIS remove_all_extents<_Tp[_Np]> {typedef typename remove_all_extents<_Tp>::type type;}; +#if _LIBCPP_STD_VER > 11 +template using remove_all_extents_t = typename remove_all_extents<_Tp>::type; +#endif + // is_abstract namespace __is_abstract_imp @@ -916,7 +1032,7 @@ template struct __find_max_align<__type_list<_Hp, _Tp>, _Len> : public integral_constant::value>::value> {}; -template ::value> +template ::value> struct _LIBCPP_TYPE_VIS aligned_storage { typedef typename __find_pod<__all_types, _Align>::type _Aligner; @@ -928,6 +1044,11 @@ struct _LIBCPP_TYPE_VIS aligned_storage }; }; +#if _LIBCPP_STD_VER > 11 +template ::value> + using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; +#endif + #define _CREATE_ALIGNED_STORAGE_SPECIALIZATION(n) \ template \ struct _LIBCPP_TYPE_VIS aligned_storage<_Len, n>\ @@ -989,6 +1110,10 @@ struct aligned_union typedef typename aligned_storage<__len, alignment_value>::type type; }; +#if _LIBCPP_STD_VER > 11 +template using aligned_union_t = typename aligned_union<_Len, _Types...>::type; +#endif + #endif // _LIBCPP_HAS_NO_VARIADICS // __promote @@ -1150,6 +1275,10 @@ struct _LIBCPP_TYPE_VIS make_signed typedef typename __apply_cv<_Tp, typename __make_signed::type>::type>::type type; }; +#if _LIBCPP_STD_VER > 11 +template using make_signed_t = typename make_signed<_Tp>::type; +#endif + template ::value || is_enum<_Tp>::value> struct __make_unsigned {}; @@ -1175,6 +1304,10 @@ struct _LIBCPP_TYPE_VIS make_unsigned typedef typename __apply_cv<_Tp, typename __make_unsigned::type>::type>::type type; }; +#if _LIBCPP_STD_VER > 11 +template using make_unsigned_t = typename make_unsigned<_Tp>::type; +#endif + #ifdef _LIBCPP_HAS_NO_VARIADICS template @@ -1233,6 +1366,10 @@ struct _LIBCPP_TYPE_VIS common_type<_Tp, _Up, _Vp...> typedef typename common_type::type, _Vp...>::type type; }; +#if _LIBCPP_STD_VER > 11 +template using common_type_t = typename common_type<_Tp...>::type; +#endif + #endif // _LIBCPP_HAS_NO_VARIADICS // is_assignable @@ -1411,6 +1548,10 @@ public: >::type type; }; +#if _LIBCPP_STD_VER > 11 +template using decay_t = typename decay<_Tp>::type; +#endif + #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template @@ -2984,6 +3125,10 @@ class _LIBCPP_TYPE_VIS result_of<_Fp(_Args...)> { }; +#if _LIBCPP_STD_VER > 11 +template using result_of_t = typename result_of<_Tp>::type; +#endif + #endif // _LIBCPP_HAS_NO_VARIADICS template @@ -3078,6 +3223,10 @@ struct underlying_type typedef _LIBCXX_UNDERLYING_TYPE(_Tp) type; }; +#if _LIBCPP_STD_VER > 11 +template using underlying_type_t = typename underlying_type<_Tp>::type; +#endif + #else // _LIBCXX_UNDERLYING_TYPE template diff --git a/test/utilities/meta/meta.rel/is_convertible.pass.cpp b/test/utilities/meta/meta.rel/is_convertible.pass.cpp index e0728543..37daa460 100644 --- a/test/utilities/meta/meta.rel/is_convertible.pass.cpp +++ b/test/utilities/meta/meta.rel/is_convertible.pass.cpp @@ -13,6 +13,24 @@ #include +template +void test_is_convertible() +{ + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); +} + +template +void test_is_not_convertible() +{ + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); +} + typedef void Function(); typedef char Array[1]; @@ -22,353 +40,143 @@ class NonCopyable { int main() { - { - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); + // void + test_is_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // Function + test_is_not_convertible (); + test_is_not_convertible (); + test_is_convertible (); + test_is_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // Function& + test_is_not_convertible (); + test_is_not_convertible (); + test_is_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // Function* + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // Array + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_not_convertible (); + test_is_not_convertible (); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // Array& + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_not_convertible (); + test_is_not_convertible (); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); + // char + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_convertible (); + static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); - static_assert(( std::is_convertible::value), ""); + // char& + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_convertible (); + static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - } - { - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + test_is_not_convertible (); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); - static_assert((!std::is_convertible::value), ""); + // char* + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + test_is_not_convertible (); + static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); - } - { + + // NonCopyable static_assert((std::is_convertible::value), ""); static_assert((std::is_convertible::value), ""); static_assert((std::is_convertible::value), ""); @@ -378,5 +186,4 @@ int main() static_assert((std::is_convertible::value), ""); static_assert((std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); - } } diff --git a/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp index 2250d3f4..28bbedee 100644 --- a/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp @@ -15,18 +15,27 @@ enum Enum {zero, one_}; +template +void test_remove_all_extents() +{ + static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif +} + int main() { - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const Enum>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); + test_remove_all_extents (); } diff --git a/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp index dcf9bdc1..c688c26b 100644 --- a/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp @@ -15,18 +15,28 @@ enum Enum {zero, one_}; +template +void test_remove_extent() +{ + static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif +} + + int main() { - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const Enum>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, int[3]>::value), ""); - static_assert((std::is_same::type, const int[3]>::value), ""); - static_assert((std::is_same::type, int[3]>::value), ""); - static_assert((std::is_same::type, const int[3]>::value), ""); - static_assert((std::is_same::type, int[2][3]>::value), ""); - static_assert((std::is_same::type, const int[2][3]>::value), ""); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); + test_remove_extent (); } diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp index 6fc952ad..19b1fb4d 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp @@ -17,6 +17,9 @@ template void test_add_const_imp() { static_assert((std::is_same::type, const U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp index 8a0f6e53..4905e518 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp @@ -17,6 +17,9 @@ template void test_add_cv_imp() { static_assert((std::is_same::type, const volatile U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp index 09d62b65..7a12c44a 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp @@ -17,6 +17,9 @@ template void test_add_volatile_imp() { static_assert((std::is_same::type, volatile U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp index 9e433cd8..cd2faf78 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp @@ -17,6 +17,9 @@ template void test_remove_const_imp() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp index dd8a0d6a..3f6405c8 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp @@ -17,6 +17,9 @@ template void test_remove_cv_imp() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp index 173a0f52..6258a903 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp @@ -17,6 +17,9 @@ template void test_remove_volatile_imp() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } template diff --git a/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp index 323fd5e4..d1b77004 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp @@ -17,106 +17,169 @@ int main() { { typedef std::aligned_storage<10, 1 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 1, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_storage<10, 2 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_storage<10, 4 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 12, ""); } { typedef std::aligned_storage<10, 8 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<10, 16 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<10, 32 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<20, 32 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<40, 32 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 64, ""); } { typedef std::aligned_storage<12, 16 >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<1>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 1, ""); static_assert(sizeof(T1) == 1, ""); } { typedef std::aligned_storage<2>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 2, ""); } { typedef std::aligned_storage<3>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_storage<4>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_storage<5>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<7>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<8>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<9>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<15>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<16>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<17>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<10>::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp index b07a0647..ae849ca5 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp @@ -18,46 +18,73 @@ int main() #ifndef _LIBCPP_HAS_NO_VARIADICS { typedef std::aligned_union<10, char >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 1, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_union<10, short >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_union<10, int >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 12, ""); } { typedef std::aligned_union<10, double >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_union<10, short, char >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_union<10, char, short >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_union<2, int, char, short >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_union<2, char, int, short >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_union<2, char, short, int >::type T1; +#if _LIBCPP_STD_VER > 11 + static_assert(std::is_same, T1>::value, "" ); +#endif static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp index 600de3c9..7f01e4ba 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp @@ -17,10 +17,22 @@ int main() { static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, char>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, int>::value), ""); + static_assert((std::is_same, char>::value), ""); +#endif static_assert((std::is_same::type, double>::value), ""); static_assert((std::is_same::type, int>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, double>::value), ""); + static_assert((std::is_same, int>::value), ""); +#endif static_assert((std::is_same::type, double>::value), ""); static_assert((std::is_same::type, long long>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, double>::value), ""); + static_assert((std::is_same, long long>::value), ""); +#endif } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp index e4741a97..ac11e3a4 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp @@ -17,4 +17,8 @@ int main() { static_assert((std::is_same::type, char>::value), ""); static_assert((std::is_same::type, int>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, char>::value), ""); + static_assert((std::is_same, int>::value), ""); +#endif } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp index 5416f2ad..bd8ae0e2 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp @@ -17,6 +17,9 @@ template void test_decay() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } int main() diff --git a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp index 8eae93ae..eb72b0f3 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp @@ -17,4 +17,8 @@ int main() { static_assert((std::is_same::type, void>::value), ""); static_assert((std::is_same::type, int>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, void>::value), ""); + static_assert((std::is_same, int>::value), ""); +#endif } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/enable_if2.fail.cpp b/test/utilities/meta/meta.trans/meta.trans.other/enable_if2.fail.cpp new file mode 100644 index 00000000..8ce89457 --- /dev/null +++ b/test/utilities/meta/meta.trans/meta.trans.other/enable_if2.fail.cpp @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// enable_if + +#include + +int main() +{ +#if _LIBCPP_STD_VER > 11 + typedef std::enable_if_t A; +#else + static_assert ( false, "" ); +#endif +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp index 33c0ed4a..368a3eb5 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp @@ -34,8 +34,36 @@ struct wat void foo(); }; +template +void test_result_of_imp() +{ + static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif +} + int main() { + test_result_of_imp (); + test_result_of_imp (); + test_result_of_imp (); + test_result_of_imp, int), void> (); + test_result_of_imp (); + test_result_of_imp (); +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + test_result_of_imp (); +#endif + test_result_of_imp (); +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + using type1 = std::result_of::type; +#endif +#if _LIBCPP_STD_VER > 11 + using type2 = std::result_of_t; +#endif + + + static_assert((std::is_same::type, short>::value), "Error!"); static_assert((std::is_same::type, double>::value), "Error!"); static_assert((std::is_same::type, bool>::value), "Error!"); @@ -46,5 +74,7 @@ int main() static_assert((std::is_same::type, char&&>::value), "Error!"); #endif static_assert((std::is_same::type, const char&>::value), "Error!"); +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES using type = std::result_of::type; +#endif } diff --git a/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp index a21120bd..728062b7 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp @@ -14,20 +14,28 @@ #include #include +enum E { V = INT_MIN }; +enum F { W = UINT_MAX }; + int main() { - enum E { V = INT_MIN }; - enum F { W = UINT_MAX }; - static_assert((std::is_same::type, int>::value), "E has the wrong underlying type"); static_assert((std::is_same::type, unsigned>::value), "F has the wrong underlying type"); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, int>::value), ""); + static_assert((std::is_same, unsigned>::value), ""); +#endif + #if __has_feature(cxx_strong_enums) enum G : char { }; static_assert((std::is_same::type, char>::value), "G has the wrong underlying type"); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, char>::value), ""); +#endif #endif // __has_feature(cxx_strong_enums) } diff --git a/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp index 42128251..76d0f12d 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp @@ -17,6 +17,9 @@ template void test_add_pointer() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } int main() diff --git a/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp index ed09b038..9cecd390 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp @@ -17,6 +17,9 @@ template void test_remove_pointer() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } int main() diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp index eddbbe0d..8150ce04 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp @@ -17,6 +17,9 @@ template void test_add_lvalue_reference() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } int main() diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp index 92538519..e8f08fdc 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp @@ -19,6 +19,9 @@ template void test_add_rvalue_reference() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp index 8d837bb1..f9ebc37a 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp @@ -17,6 +17,9 @@ template void test_remove_reference() { static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif } int main() diff --git a/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp index 936ed865..8acc01a1 100644 --- a/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp @@ -21,22 +21,30 @@ enum BigEnum big = 0xFFFFFFFFFFFFFFFFULL }; +template +void test_make_signed() +{ + static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif +} + int main() { - static_assert((std::is_same::type, signed char>::value), ""); - static_assert((std::is_same::type, signed char>::value), ""); - static_assert((std::is_same::type, signed char>::value), ""); - static_assert((std::is_same::type, signed short>::value), ""); - static_assert((std::is_same::type, signed short>::value), ""); - static_assert((std::is_same::type, signed int>::value), ""); - static_assert((std::is_same::type, signed int>::value), ""); - static_assert((std::is_same::type, signed long>::value), ""); - static_assert((std::is_same::type, long>::value), ""); - static_assert((std::is_same::type, signed long long>::value), ""); - static_assert((std::is_same::type, signed long long>::value), ""); - static_assert((std::is_same::type, int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, const int>::value), ""); - static_assert((std::is_same::type, - std::conditional::type>::value), ""); + test_make_signed< signed char, signed char >(); + test_make_signed< unsigned char, signed char >(); + test_make_signed< char, signed char >(); + test_make_signed< short, signed short >(); + test_make_signed< unsigned short, signed short >(); + test_make_signed< int, signed int >(); + test_make_signed< unsigned int, signed int >(); + test_make_signed< long, signed long >(); + test_make_signed< unsigned long, long >(); + test_make_signed< long long, signed long long >(); + test_make_signed< unsigned long long, signed long long >(); + test_make_signed< wchar_t, int >(); + test_make_signed< const wchar_t, const int >(); + test_make_signed< const Enum, const int >(); + test_make_signed< BigEnum, std::conditional::type >(); } diff --git a/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp index dcea01c7..492e01fb 100644 --- a/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp @@ -21,22 +21,31 @@ enum BigEnum big = 0xFFFFFFFFFFFFFFFFULL }; +template +void test_make_unsigned() +{ + static_assert((std::is_same::type, U>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same, U>::value), ""); +#endif +} + int main() { - static_assert((std::is_same::type, unsigned char>::value), ""); - static_assert((std::is_same::type, unsigned char>::value), ""); - static_assert((std::is_same::type, unsigned char>::value), ""); - static_assert((std::is_same::type, unsigned short>::value), ""); - static_assert((std::is_same::type, unsigned short>::value), ""); - static_assert((std::is_same::type, unsigned int>::value), ""); - static_assert((std::is_same::type, unsigned int>::value), ""); - static_assert((std::is_same::type, unsigned long>::value), ""); - static_assert((std::is_same::type, unsigned long>::value), ""); - static_assert((std::is_same::type, unsigned long long>::value), ""); - static_assert((std::is_same::type, unsigned long long>::value), ""); - static_assert((std::is_same::type, unsigned int>::value), ""); - static_assert((std::is_same::type, const unsigned int>::value), ""); - static_assert((std::is_same::type, const unsigned int>::value), ""); - static_assert((std::is_same::type, - std::conditional::type>::value), ""); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned (); + test_make_unsigned::type> (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp index 9bae2cd7..7563c2fd 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp @@ -16,7 +16,7 @@ template void test_rvalue_ref() { - static_assert(std::is_reference::value, ""); + static_assert( std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert(!std::is_object::value, ""); diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp index e37987c5..8c21c759 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp @@ -22,17 +22,32 @@ struct B void operator=(A); }; +template +void test_is_assignable() +{ + static_assert(( std::is_assignable::value), ""); +} + +template +void test_is_not_assignable() +{ + static_assert((!std::is_assignable::value), ""); +} + int main() { - static_assert(( std::is_assignable::value), ""); - static_assert(( std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); - static_assert(( std::is_assignable::value), ""); - static_assert(( std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); - static_assert(( std::is_assignable::value), ""); - static_assert((!std::is_assignable::value), ""); + test_is_assignable (); + test_is_assignable (); + test_is_assignable (); + test_is_assignable (); + test_is_assignable (); + +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + test_is_not_assignable (); + test_is_not_assignable (); +#endif + test_is_not_assignable (); + test_is_not_assignable (); + test_is_not_assignable (); + test_is_not_assignable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp index 6f58adc5..0753ab7b 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp @@ -18,20 +18,57 @@ struct A { explicit A(int); A(int, double); +#if __has_feature(cxx_access_control_sfinae) private: +#endif A(char); }; +template +void test_is_constructible() +{ + static_assert( (std::is_constructible::value), ""); +} + +template +void test_is_constructible() +{ + static_assert( (std::is_constructible::value), ""); +} + +template +void test_is_constructible() +{ + static_assert( (std::is_constructible::value), ""); +} + +template +void test_is_not_constructible() +{ + static_assert((!std::is_constructible::value), ""); +} + +template +void test_is_not_constructible() +{ + static_assert((!std::is_constructible::value), ""); +} + int main() { - static_assert((std::is_constructible::value), ""); - static_assert((std::is_constructible::value), ""); - static_assert((std::is_constructible::value), ""); - static_assert((std::is_constructible::value), ""); - static_assert((!std::is_constructible::value), ""); - static_assert((!std::is_constructible::value), ""); - static_assert((!std::is_constructible::value), ""); - static_assert((!std::is_constructible::value), ""); - static_assert((!std::is_constructible::value), ""); - static_assert(( std::is_constructible::value), ""); + test_is_constructible (); + test_is_constructible (); + test_is_constructible (); + test_is_constructible (); + test_is_constructible (); + + test_is_not_constructible (); +#if __has_feature(cxx_access_control_sfinae) + test_is_not_constructible (); +#else + test_is_constructible (); +#endif + test_is_not_constructible (); + test_is_not_constructible (); + test_is_not_constructible (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp index 9f9acd19..bde44de4 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp @@ -13,6 +13,18 @@ #include +template +void test_is_copy_assignable() +{ + static_assert(( std::is_copy_assignable::value), ""); +} + +template +void test_is_not_copy_assignable() +{ + static_assert((!std::is_copy_assignable::value), ""); +} + class Empty { }; @@ -42,16 +54,21 @@ class B int main() { - static_assert(( std::is_copy_assignable::value), ""); - static_assert((!std::is_copy_assignable::value), ""); - static_assert((!std::is_copy_assignable::value), ""); - static_assert((!std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert(( std::is_copy_assignable::value), ""); - static_assert((!std::is_copy_assignable::value), ""); - static_assert((!std::is_copy_assignable::value), ""); + test_is_copy_assignable (); + test_is_copy_assignable (); + test_is_copy_assignable (); + test_is_copy_assignable (); + test_is_copy_assignable (); + test_is_copy_assignable (); + test_is_copy_assignable (); + +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + test_is_not_copy_assignable (); + test_is_not_copy_assignable (); + test_is_not_copy_assignable (); +#endif +#if __has_feature(cxx_access_control_sfinae) + test_is_not_copy_assignable (); +#endif + test_is_not_copy_assignable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp index 1cfb76fa..837d0b0d 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp @@ -13,10 +13,16 @@ #include -template +template void test_is_copy_constructible() { - static_assert(std::is_copy_constructible::value == Result, ""); + static_assert( std::is_copy_constructible::value, ""); +} + +template +void test_is_not_copy_constructible() +{ + static_assert(!std::is_copy_constructible::value, ""); } class Empty @@ -54,20 +60,22 @@ class B int main() { - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); + test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); - test_is_copy_constructible(); + test_is_not_copy_constructible(); + test_is_not_copy_constructible(); + test_is_not_copy_constructible(); + test_is_not_copy_constructible(); +#if __has_feature(cxx_access_control_sfinae) + test_is_not_copy_constructible(); +#endif } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp index 760a79b0..379226a0 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp @@ -13,13 +13,22 @@ #include -template +template void test_is_default_constructible() { - static_assert(std::is_default_constructible::value == Result, ""); - static_assert(std::is_default_constructible::value == Result, ""); - static_assert(std::is_default_constructible::value == Result, ""); - static_assert(std::is_default_constructible::value == Result, ""); + static_assert( std::is_default_constructible::value, ""); + static_assert( std::is_default_constructible::value, ""); + static_assert( std::is_default_constructible::value, ""); + static_assert( std::is_default_constructible::value, ""); +} + +template +void test_is_not_default_constructible() +{ + static_assert(!std::is_default_constructible::value, ""); + static_assert(!std::is_default_constructible::value, ""); + static_assert(!std::is_default_constructible::value, ""); + static_assert(!std::is_default_constructible::value, ""); } class Empty @@ -57,20 +66,22 @@ class B int main() { - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); + test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); - test_is_default_constructible(); + test_is_not_default_constructible(); + test_is_not_default_constructible(); + test_is_not_default_constructible(); + test_is_not_default_constructible(); +#if __has_feature(cxx_access_control_sfinae) + test_is_not_default_constructible(); +#endif } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_destructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_destructible.pass.cpp index 61b04b2a..cc7f75eb 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_destructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_destructible.pass.cpp @@ -13,13 +13,22 @@ #include -template +template void test_is_destructible() { - static_assert( std::is_destructible::value == Result, ""); - static_assert( std::is_destructible::value == Result, ""); - static_assert( std::is_destructible::value == Result, ""); - static_assert( std::is_destructible::value == Result, ""); + static_assert( std::is_destructible::value, ""); + static_assert( std::is_destructible::value, ""); + static_assert( std::is_destructible::value, ""); + static_assert( std::is_destructible::value, ""); +} + +template +void test_is_not_destructible() +{ + static_assert(!std::is_destructible::value, ""); + static_assert(!std::is_destructible::value, ""); + static_assert(!std::is_destructible::value, ""); + static_assert(!std::is_destructible::value, ""); } class Empty @@ -50,17 +59,20 @@ struct A int main() { - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); - test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + test_is_destructible(); + + test_is_not_destructible(); + test_is_not_destructible(); +#if __has_feature(cxx_access_control_sfinae) + test_is_not_destructible(); +#endif } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp index 30e31ba5..ce781cd9 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp @@ -13,6 +13,18 @@ #include +template +void test_is_literal_type() +{ + static_assert( std::is_literal_type::value, ""); +} + +template +void test_is_not_literal_type() +{ + static_assert(!std::is_literal_type::value, ""); +} + struct A { }; @@ -24,10 +36,11 @@ struct B int main() { - static_assert( std::is_literal_type::value, ""); - static_assert( std::is_literal_type::value, ""); - static_assert( std::is_literal_type::value, ""); - static_assert( std::is_literal_type::value, ""); - static_assert( std::is_literal_type::value, ""); - static_assert(!std::is_literal_type::value, ""); + test_is_literal_type (); + test_is_literal_type (); + test_is_literal_type (); + test_is_literal_type (); + test_is_literal_type (); + + test_is_not_literal_type (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp index 8941fe3e..892ffd78 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp @@ -13,6 +13,18 @@ #include +template +void test_is_move_assignable() +{ + static_assert( std::is_move_assignable::value, ""); +} + +template +void test_is_not_move_assignable() +{ + static_assert(!std::is_move_assignable::value, ""); +} + class Empty { }; @@ -37,15 +49,18 @@ struct A int main() { - static_assert(( std::is_move_assignable::value), ""); - static_assert((!std::is_move_assignable::value), ""); - static_assert((!std::is_move_assignable::value), ""); - static_assert((!std::is_move_assignable::value), ""); - static_assert((!std::is_move_assignable::value), ""); - static_assert((!std::is_move_assignable::value), ""); - static_assert(( std::is_move_assignable::value), ""); - static_assert(( std::is_move_assignable::value), ""); - static_assert(( std::is_move_assignable::value), ""); - static_assert(( std::is_move_assignable::value), ""); - static_assert(( std::is_move_assignable::value), ""); + test_is_move_assignable (); + test_is_move_assignable (); + test_is_move_assignable (); + test_is_move_assignable (); + test_is_move_assignable (); + test_is_move_assignable (); + +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + test_is_not_move_assignable (); + test_is_not_move_assignable (); + test_is_not_move_assignable (); + test_is_not_move_assignable (); +#endif + test_is_not_move_assignable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_constructible.pass.cpp index 3ad3666a..7409ebaa 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_constructible.pass.cpp @@ -13,10 +13,16 @@ #include -template +template void test_is_move_constructible() { - static_assert(std::is_move_constructible::value == Result, ""); + static_assert( std::is_move_constructible::value, ""); +} + +template +void test_is_not_move_constructible() +{ + static_assert(!std::is_move_constructible::value, ""); } class Empty @@ -49,25 +55,27 @@ struct A struct B { +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES B(B&&); +#endif }; int main() { - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); + test_is_not_move_constructible(); + test_is_not_move_constructible(); + test_is_not_move_constructible(); + test_is_not_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); - test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); + test_is_move_constructible(); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable.pass.cpp index b5711526..3bd2b3b7 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable.pass.cpp @@ -13,6 +13,18 @@ #include +template +void test_is_nothrow_assignable() +{ + static_assert(( std::is_nothrow_assignable::value), ""); +} + +template +void test_is_not_nothrow_assignable() +{ + static_assert((!std::is_nothrow_assignable::value), ""); +} + struct A { }; @@ -24,11 +36,14 @@ struct B int main() { - static_assert(( std::is_nothrow_assignable::value), ""); - static_assert(( std::is_nothrow_assignable::value), ""); - static_assert((!std::is_nothrow_assignable::value), ""); - static_assert((!std::is_nothrow_assignable::value), ""); - static_assert(( std::is_nothrow_assignable::value), ""); - static_assert((!std::is_nothrow_assignable::value), ""); - static_assert((!std::is_nothrow_assignable::value), ""); + test_is_nothrow_assignable (); + test_is_nothrow_assignable (); +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + test_is_nothrow_assignable (); +#endif + + test_is_not_nothrow_assignable (); + test_is_not_nothrow_assignable (); + test_is_not_nothrow_assignable (); + test_is_not_nothrow_assignable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp index 5da776fa..8978ec9a 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp @@ -14,6 +14,36 @@ #include +template +void test_is_nothrow_constructible() +{ + static_assert(( std::is_nothrow_constructible::value), ""); +} + +template +void test_is_nothrow_constructible() +{ + static_assert(( std::is_nothrow_constructible::value), ""); +} + +template +void test_is_not_nothrow_constructible() +{ + static_assert((!std::is_nothrow_constructible::value), ""); +} + +template +void test_is_not_nothrow_constructible() +{ + static_assert((!std::is_nothrow_constructible::value), ""); +} + +template +void test_is_not_nothrow_constructible() +{ + static_assert((!std::is_nothrow_constructible::value), ""); +} + class Empty { }; @@ -42,11 +72,12 @@ struct A int main() { - static_assert(( std::is_nothrow_constructible::value), ""); - static_assert(( std::is_nothrow_constructible::value), ""); - static_assert((!std::is_nothrow_constructible::value), ""); - static_assert((!std::is_nothrow_constructible::value), ""); - static_assert((!std::is_nothrow_constructible::value), ""); - static_assert(( std::is_nothrow_constructible::value), ""); - static_assert(( std::is_nothrow_constructible::value), ""); + test_is_nothrow_constructible (); + test_is_nothrow_constructible (); + test_is_nothrow_constructible (); + test_is_nothrow_constructible (); + + test_is_not_nothrow_constructible (); + test_is_not_nothrow_constructible (); + test_is_not_nothrow_constructible (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp index 1436dd44..d843803c 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp @@ -13,10 +13,16 @@ #include -template +template void test_has_nothrow_assign() { - static_assert(std::is_nothrow_copy_assignable::value == Result, ""); + static_assert( std::is_nothrow_copy_assignable::value, ""); +} + +template +void test_has_not_nothrow_assign() +{ + static_assert(!std::is_nothrow_copy_assignable::value, ""); } class Empty @@ -42,17 +48,18 @@ struct A int main() { - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + + test_has_not_nothrow_assign(); + test_has_not_nothrow_assign(); + test_has_not_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp index 1833e698..a513d52f 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp @@ -63,15 +63,23 @@ int main() test_has_not_nothrow_destructor(); test_has_not_nothrow_destructor(); +#if __has_feature(cxx_noexcept) test_is_nothrow_destructible(); +#endif test_is_nothrow_destructible(); +#if __has_feature(cxx_unrestricted_unions) test_is_nothrow_destructible(); +#endif +#if __has_feature(cxx_access_control_sfinae) test_is_nothrow_destructible(); +#endif test_is_nothrow_destructible(); test_is_nothrow_destructible(); test_is_nothrow_destructible(); test_is_nothrow_destructible(); test_is_nothrow_destructible(); test_is_nothrow_destructible(); +#if __has_feature(cxx_noexcept) test_is_nothrow_destructible(); +#endif } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable.pass.cpp index 96a4a32b..fe51e438 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable.pass.cpp @@ -13,10 +13,16 @@ #include -template +template void test_has_nothrow_assign() { - static_assert(std::is_nothrow_move_assignable::value == Result, ""); + static_assert( std::is_nothrow_move_assignable::value, ""); +} + +template +void test_has_not_nothrow_assign() +{ + static_assert(!std::is_nothrow_move_assignable::value, ""); } class Empty @@ -42,16 +48,16 @@ struct A int main() { - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); - test_has_nothrow_assign(); + test_has_not_nothrow_assign(); + test_has_not_nothrow_assign(); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp index 62a59210..8f5547ec 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp @@ -52,8 +52,13 @@ class Abstract virtual ~Abstract() = 0; }; +#if __has_feature(cxx_attributes) class Final final { }; +#else +class Final { +}; +#endif int main() { diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp index 70500f34..668c4cdc 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp @@ -13,6 +13,24 @@ #include +template +void test_is_standard_layout() +{ + static_assert( std::is_standard_layout::value, ""); + static_assert( std::is_standard_layout::value, ""); + static_assert( std::is_standard_layout::value, ""); + static_assert( std::is_standard_layout::value, ""); +} + +template +void test_is_not_standard_layout() +{ + static_assert(!std::is_standard_layout::value, ""); + static_assert(!std::is_standard_layout::value, ""); + static_assert(!std::is_standard_layout::value, ""); + static_assert(!std::is_standard_layout::value, ""); +} + template struct pair { @@ -22,9 +40,9 @@ struct pair int main() { - static_assert( std::is_standard_layout::value, ""); - static_assert( std::is_standard_layout::value, ""); - static_assert(!std::is_standard_layout::value, ""); - static_assert(!std::is_standard_layout::value, ""); - static_assert(( std::is_standard_layout >::value), ""); + test_is_standard_layout (); + test_is_standard_layout (); + test_is_standard_layout > (); + + test_is_not_standard_layout (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp index bf833c0a..af38699d 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp @@ -13,6 +13,24 @@ #include +template +void test_is_trivial() +{ + static_assert( std::is_trivial::value, ""); + static_assert( std::is_trivial::value, ""); + static_assert( std::is_trivial::value, ""); + static_assert( std::is_trivial::value, ""); +} + +template +void test_is_not_trivial() +{ + static_assert(!std::is_trivial::value, ""); + static_assert(!std::is_trivial::value, ""); + static_assert(!std::is_trivial::value, ""); + static_assert(!std::is_trivial::value, ""); +} + struct A {}; class B @@ -23,9 +41,10 @@ public: int main() { - static_assert( std::is_trivial::value, ""); - static_assert(!std::is_trivial::value, ""); - static_assert(!std::is_trivial::value, ""); - static_assert( std::is_trivial::value, ""); - static_assert(!std::is_trivial::value, ""); + test_is_trivial (); + test_is_trivial (); + + test_is_not_trivial (); + test_is_not_trivial (); + test_is_not_trivial (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp index 14f19ab3..547c346c 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp @@ -14,6 +14,24 @@ #include #include +template +void test_is_trivially_copyable() +{ + static_assert( std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); +} + +template +void test_is_not_trivially_copyable() +{ + static_assert(!std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); +} + struct A { int i_; @@ -33,12 +51,13 @@ public: int main() { - static_assert( std::is_trivially_copyable::value, ""); - static_assert( std::is_trivially_copyable::value, ""); - static_assert(!std::is_trivially_copyable::value, ""); - static_assert( std::is_trivially_copyable::value, ""); - static_assert( std::is_trivially_copyable::value, ""); - static_assert(!std::is_trivially_copyable::value, ""); - static_assert(!std::is_trivially_copyable::value, ""); - static_assert( std::is_trivially_copyable::value, ""); + test_is_trivially_copyable (); + test_is_trivially_copyable (); + test_is_trivially_copyable (); + test_is_trivially_copyable (); + test_is_trivially_copyable (); + + test_is_not_trivially_copyable (); + test_is_not_trivially_copyable (); + test_is_not_trivially_copyable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp index cd6d5d27..984824a0 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp @@ -13,6 +13,18 @@ #include +template +void test_is_trivially_assignable() +{ + static_assert(( std::is_trivially_assignable::value), ""); +} + +template +void test_is_not_trivially_assignable() +{ + static_assert((!std::is_trivially_assignable::value), ""); +} + struct A { }; @@ -24,11 +36,12 @@ struct B int main() { - static_assert(( std::is_trivially_assignable::value), ""); - static_assert(( std::is_trivially_assignable::value), ""); - static_assert((!std::is_trivially_assignable::value), ""); - static_assert((!std::is_trivially_assignable::value), ""); - static_assert(( std::is_trivially_assignable::value), ""); - static_assert((!std::is_trivially_assignable::value), ""); - static_assert((!std::is_trivially_assignable::value), ""); + test_is_trivially_assignable (); + test_is_trivially_assignable (); + test_is_trivially_assignable (); + + test_is_not_trivially_assignable (); + test_is_not_trivially_assignable (); + test_is_not_trivially_assignable (); + test_is_not_trivially_assignable (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible.pass.cpp index ce0373ba..4171d4d3 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible.pass.cpp @@ -14,6 +14,36 @@ #include +template +void test_is_trivially_constructible() +{ + static_assert(( std::is_trivially_constructible::value), ""); +} + +template +void test_is_trivially_constructible() +{ + static_assert(( std::is_trivially_constructible::value), ""); +} + +template +void test_is_not_trivially_constructible() +{ + static_assert((!std::is_trivially_constructible::value), ""); +} + +template +void test_is_not_trivially_constructible() +{ + static_assert((!std::is_trivially_constructible::value), ""); +} + +template +void test_is_not_trivially_constructible() +{ + static_assert((!std::is_trivially_constructible::value), ""); +} + struct A { explicit A(int); @@ -22,9 +52,10 @@ struct A int main() { - static_assert(( std::is_trivially_constructible::value), ""); - static_assert(( std::is_trivially_constructible::value), ""); - static_assert((!std::is_trivially_constructible::value), ""); - static_assert((!std::is_trivially_constructible::value), ""); - static_assert((!std::is_trivially_constructible::value), ""); + test_is_trivially_constructible (); + test_is_trivially_constructible (); + + test_is_not_trivially_constructible (); + test_is_not_trivially_constructible (); + test_is_not_trivially_constructible (); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp index 2ec06a09..7d72565e 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp @@ -13,10 +13,16 @@ #include -template -void test_has_trivial_assign() +template +void test_has_trivially_copy_assignable() { - static_assert(std::is_trivially_copy_assignable::value == Result, ""); + static_assert( std::is_trivially_copy_assignable::value, ""); +} + +template +void test_has_not_trivially_copy_assignable() +{ + static_assert(!std::is_trivially_copy_assignable::value, ""); } class Empty @@ -47,18 +53,19 @@ struct A int main() { - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + test_has_trivially_copy_assignable(); + + test_has_not_trivially_copy_assignable(); + test_has_not_trivially_copy_assignable(); + test_has_not_trivially_copy_assignable(); + test_has_not_trivially_copy_assignable(); + test_has_not_trivially_copy_assignable(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); } diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp index dcdaa25b..c3fc7ac0 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp @@ -13,10 +13,16 @@ #include -template +template void test_has_trivial_assign() { - static_assert(std::is_trivially_move_assignable::value == Result, ""); + static_assert( std::is_trivially_move_assignable::value, ""); +} + +template +void test_has_not_trivial_assign() +{ + static_assert(!std::is_trivially_move_assignable::value, ""); } class Empty @@ -47,18 +53,19 @@ struct A int main() { - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); - test_has_trivial_assign(); }