[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;
}
- [lmi-commits] [lmi] master updated (a07a61b8 -> 3d6f262f), Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 9131e7c6 2/9: Also test polymorphic-ness, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 52e11311 3/9: Print type name with garniture, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 27fbf8ca 8/9: Rewrite unit-test macros to allow invocation with terminal '; ', Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 6b384aee 1/9: Explicitly test derivation from class polymorphic_base,
Greg Chicares <=
- [lmi-commits] [lmi] master b380d114 5/9: Preclude UB, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master ac56835b 7/9: Remove null statements, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 3d6f262f 9/9: Enable '-Wextra-semi' for clang, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master 2ca1e113 6/9: Comment out superfluous semicolons, Greg Chicares, 2022/07/29
- [lmi-commits] [lmi] master cb353f7b 4/9: Assert that a type is not default constructible, Greg Chicares, 2022/07/29