Make tests for is_empty better. No functional change.
authorMarshall Clow <mclow.lists@gmail.com>
Wed, 5 Oct 2016 17:01:16 +0000 (17:01 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Wed, 5 Oct 2016 17:01:16 +0000 (17:01 +0000)
llvm-svn: 283339

libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp

index 410c1db..c1cbccb 100644 (file)
 
 // is_empty
 
+// T is a non-union class type with:
+//  no non-static data members,
+//  no unnamed bit-fields of non-zero length,
+//  no virtual member functions,
+//  no virtual base classes,
+//  and no base class B for which is_empty_v<B> is false.
+
+
 #include <type_traits>
 #include "test_macros.h"
 
@@ -44,22 +52,33 @@ void test_is_not_empty()
 #endif
 }
 
-class Empty
-{
-};
+class Empty {};
+struct NotEmpty { int foo; };
 
-class NotEmpty
+class VirtualFn
 {
-    virtual ~NotEmpty();
+    virtual ~VirtualFn();
 };
 
 union Union {};
 
+struct EmptyBase    : public Empty {};
+struct VirtualBase  : virtual Empty {};
+struct NotEmptyBase : public NotEmpty {};
+
+struct StaticMember    { static int foo; };
+struct NonStaticMember {        int foo; };
+
 struct bit_zero
 {
     int :  0;
 };
 
+struct bit_one
+{
+    int :  1;
+};
+
 int main()
 {
     test_is_not_empty<void>();
@@ -72,7 +91,14 @@ int main()
     test_is_not_empty<char[]>();
     test_is_not_empty<Union>();
     test_is_not_empty<NotEmpty>();
+    test_is_not_empty<VirtualFn>();
+    test_is_not_empty<VirtualBase>();
+    test_is_not_empty<NotEmptyBase>();
+    test_is_not_empty<NonStaticMember>();
+    test_is_empty<bit_one>();
 
     test_is_empty<Empty>();
+    test_is_empty<EmptyBase>();
+    test_is_empty<StaticMember>();
     test_is_empty<bit_zero>();
 }