diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-11-01 21:13:10 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-11-01 21:13:10 +0000 |
commit | 00ec0bf828a30e4cfe643bfdf58a30aeaadc5c08 (patch) | |
tree | 8a6389fd258cb00825909dcc0eb7252acccf5a44 | |
parent | dd0ef099542ba49420936bd60d0e05c6e2ff4c80 (diff) | |
download | bcm5719-llvm-00ec0bf828a30e4cfe643bfdf58a30aeaadc5c08.tar.gz bcm5719-llvm-00ec0bf828a30e4cfe643bfdf58a30aeaadc5c08.zip |
Improve the tests for 'is_literal_type'
llvm-svn: 251767
-rw-r--r-- | libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp | 80 |
1 files changed, 62 insertions, 18 deletions
diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp index 174521d0e41..3b55c05958d 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp @@ -12,17 +12,20 @@ // is_literal_type #include <type_traits> +#include "test_macros.h" template <class T> void test_is_literal_type() { static_assert( std::is_literal_type<T>::value, ""); + static_assert( std::is_literal_type<const T>::value, ""); + static_assert( std::is_literal_type<volatile T>::value, ""); + static_assert( std::is_literal_type<const volatile T>::value, ""); #if TEST_STD_VER > 14 static_assert( std::is_literal_type_v<T>, ""); -// static_assert( std::is_final_v<T>, ""); -// static_assert( std::is_final_v<const T>, ""); -// static_assert( std::is_final_v<volatile T>, ""); -// static_assert( std::is_final_v<const volatile T>, ""); + static_assert( std::is_literal_type_v<const T>, ""); + static_assert( std::is_literal_type_v<volatile T>, ""); + static_assert( std::is_literal_type_v<const volatile T>, ""); #endif } @@ -30,31 +33,72 @@ template <class T> void test_is_not_literal_type() { static_assert(!std::is_literal_type<T>::value, ""); + static_assert(!std::is_literal_type<const T>::value, ""); + static_assert(!std::is_literal_type<volatile T>::value, ""); + static_assert(!std::is_literal_type<const volatile T>::value, ""); #if TEST_STD_VER > 14 - static_assert( std::is_literal_type_v<T>, ""); -// static_assert( std::is_final_v<T>, ""); -// static_assert( std::is_final_v<const T>, ""); -// static_assert( std::is_final_v<volatile T>, ""); -// static_assert( std::is_final_v<const volatile T>, ""); + static_assert(!std::is_literal_type_v<T>, ""); + static_assert(!std::is_literal_type_v<const T>, ""); + static_assert(!std::is_literal_type_v<volatile T>, ""); + static_assert(!std::is_literal_type_v<const volatile T>, ""); #endif } -struct A +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero { + int : 0; }; -struct B +class Abstract { - B(); + virtual ~Abstract() = 0; }; +enum Enum {zero, one}; + +typedef void (*FunctionPtr)(); + int main() { - test_is_literal_type<int> (); - test_is_literal_type<const int> (); - test_is_literal_type<int&> (); - test_is_literal_type<volatile int&> (); - test_is_literal_type<A> (); +#if TEST_STD_VER >= 11 + test_is_literal_type<std::nullptr_t>(); +#endif + +// Before C++14, void was not a literal type +// In C++14, cv-void is is a literal type +#if TEST_STD_VER < 14 + test_is_not_literal_type<void>(); +#else TEST_STD_VER > 14 + test_is_literal_type<void>(); +#endif + + test_is_literal_type<int>(); + test_is_literal_type<int*>(); + test_is_literal_type<const int*>(); + test_is_literal_type<int&>(); +#if TEST_STD_VER >= 11 + test_is_literal_type<int&&>(); +#endif + test_is_literal_type<double>(); + test_is_literal_type<char[3]>(); + test_is_literal_type<char[]>(); + test_is_literal_type<Empty>(); + test_is_literal_type<bit_zero>(); + test_is_literal_type<Union>(); + test_is_literal_type<Enum>(); + test_is_literal_type<FunctionPtr>(); - test_is_not_literal_type<B> (); + test_is_not_literal_type<NotEmpty>(); + test_is_not_literal_type<Abstract>(); } |