[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