Author: marshall Date: Sun Nov 1 15:13:10 2015 New Revision: 251767 URL: http://llvm.org/viewvc/llvm-project?rev=251767&view=rev Log: Improve the tests for 'is_literal_type'
Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp?rev=251767&r1=251766&r2=251767&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp Sun Nov 1 15:13:10 2015 @@ -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>(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits