[libcxx] r251767 - Improve the tests for 'is_literal_type'
Marshall Clow via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 1 13:13:11 PST 2015
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>();
}
More information about the cfe-commits
mailing list