lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 6b384aee 1/9: Explicitly test derivation from


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 6b384aee 1/9: Explicitly test derivation from class polymorphic_base
Date: Fri, 29 Jul 2022 20:42:33 -0400 (EDT)

branch: master
commit 6b384aee147681c9c58d569ef43c2fa79cbc8677
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Explicitly test derivation from class polymorphic_base
---
 crtp_base_test.cpp | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/crtp_base_test.cpp b/crtp_base_test.cpp
index 4efd72be..128a3272 100644
--- a/crtp_base_test.cpp
+++ b/crtp_base_test.cpp
@@ -46,9 +46,10 @@ void test_uncopyable()
 
 // Rule of Zero: all special members are defaulted.
 
+class A  : private lmi::polymorphic_base<A> {};
 class B0 : private lmi::abstract_base<B0> {};
 class B1 : private lmi::abstract_base<B1> {};
-class C : private B0, private B1 {};
+class C : private A, private B0, private B1 {};
 
 #if defined __GNUC__
 #   pragma GCC diagnostic push
@@ -63,6 +64,27 @@ class D final : private C
 #   pragma GCC diagnostic pop
 #endif // defined __GNUC__
 
+/// Test derivation from class polymorphic_base.
+
+void test_polymorphic_base()
+{
+    static_assert(!std::is_abstract_v <A>);
+    static_assert(!std::is_final_v    <A>);
+
+    static_assert( std::is_default_constructible_v <A>);
+    static_assert( std::is_destructible_v          <A>);
+    static_assert( std::is_copy_constructible_v    <A>);
+    static_assert( std::is_move_constructible_v    <A>);
+    static_assert( std::is_copy_assignable_v       <A>);
+    static_assert( std::is_move_assignable_v       <A>);
+
+    A da;                 // A()
+    A db(da);             // A(A const&)
+    db = da;              // A& operator=(A const&)
+    A dd {std::move(da)}; // A(A&&)
+    db = std::move(da);   // A& operator=(A&&)
+}
+
 /// Test abstract-xor-final hierarchy.
 
 void test_abstract_or_final()
@@ -104,6 +126,7 @@ void test_abstract_or_final()
 int test_main(int, char*[])
 {
     test_uncopyable();
+    test_polymorphic_base();
     test_abstract_or_final();
     return 0;
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]