lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] odd/move_semantics 03e061cf 2/5: Replace run-time wi


From: Greg Chicares
Subject: [lmi-commits] [lmi] odd/move_semantics 03e061cf 2/5: Replace run-time with compile-time tests
Date: Mon, 1 Aug 2022 19:37:41 -0400 (EDT)

branch: odd/move_semantics
commit 03e061cf60d2c609115ea5779b877a591c5b4b24
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Replace run-time with compile-time tests
    
    Changed /LMI_TEST/static_assert/ everywhere, necessarily making all
    predicates 'constexpr'. Removed doubled parentheses that had been
    required because LMI_TEST is a macro, to shield commas as in:
    -    LMI_TEST((!std::is_constructible_v<A0000,ambiguator<A0000>>));
                                                 ^ not two macro arguments
    +    static_assert(!std::is_constructible_v<A0000,ambiguator<A0000>>);
                                                     ^ okay
---
 sandbox_test.cpp | 166 +++++++++++++++++++++++++++----------------------------
 1 file changed, 83 insertions(+), 83 deletions(-)

diff --git a/sandbox_test.cpp b/sandbox_test.cpp
index eea2157a..a84b89b4 100644
--- a/sandbox_test.cpp
+++ b/sandbox_test.cpp
@@ -50,27 +50,27 @@ struct ambiguator
     operator T&&();
 };
 
-template<typename T> bool equiplausible_construct()
+template<typename T> constexpr bool equiplausible_construct()
 {
     return !std::is_constructible_v<T,ambiguator<T>>;
 }
 
-template<typename T> bool equiplausible_assign()
+template<typename T> constexpr bool equiplausible_assign()
 {
     return !std::is_assignable_v<T,ambiguator<T>>;
 }
 
-template<typename T> bool copyable()
+template<typename T> constexpr bool copyable()
 {
     return std::is_copy_constructible_v<T>;
 }
 
-template<typename T> bool a_moveable() // assign-moveable
+template<typename T> constexpr bool a_moveable() // assign-moveable
 {
     return std::is_move_assignable_v<T> && equiplausible_assign<T>();
 }
 
-template<typename T> bool c_moveable() // copy-moveable
+template<typename T> constexpr bool c_moveable() // copy-moveable
 {
     return std::is_move_constructible_v<T> && equiplausible_construct<T>();
 }
@@ -206,84 +206,84 @@ void test_classes()
 //   +    -    -    -    -    -    +   y: move assign has move semantics
 //   +    +    -    -    +    +    +   z: move compiles without error
 
-    LMI_TEST( std::is_copy_constructible_v<A0000>);
-    LMI_TEST( std::is_move_constructible_v<A0000>);
-    LMI_TEST((!std::is_constructible_v<A0000,ambiguator<A0000>>));
-    LMI_TEST( copyable<A0000>());
-    LMI_TEST( c_moveable<A0000>());
-    LMI_TEST( a_moveable<A0000>());
-
-    LMI_TEST( std::is_copy_constructible_v<A0000>);
-    LMI_TEST( std::is_copy_constructible_v<A0101>);
-    LMI_TEST( std::is_copy_constructible_v<A0202>);
-    LMI_TEST( std::is_copy_constructible_v<A0303>);
-    LMI_TEST( std::is_copy_constructible_v<A0404>);
-    LMI_TEST( std::is_copy_constructible_v<A0505>);
-    LMI_TEST(!std::is_copy_constructible_v<A3030>);
-
-    LMI_TEST( std::is_move_constructible_v<A0000>);
-    LMI_TEST( std::is_move_constructible_v<A0101>);
-    LMI_TEST(!std::is_move_constructible_v<A0202>);
-    LMI_TEST(!std::is_move_constructible_v<A0303>);
-    LMI_TEST( std::is_move_constructible_v<A0404>);
-    LMI_TEST( std::is_move_constructible_v<A0505>);
-    LMI_TEST( std::is_move_constructible_v<A3030>);
-
-    LMI_TEST( std::is_move_assignable_v<A0000>);
-    LMI_TEST( std::is_move_assignable_v<A0101>);
-    LMI_TEST(!std::is_move_assignable_v<A0202>);
-    LMI_TEST(!std::is_move_assignable_v<A0303>);
-    LMI_TEST( std::is_move_assignable_v<A0404>);
-    LMI_TEST(!std::is_move_assignable_v<A0505>);
-    LMI_TEST( std::is_move_assignable_v<A3030>);
-
-    LMI_TEST((!std::is_constructible_v<A0000,ambiguator<A0000>>));
-    LMI_TEST(( std::is_constructible_v<A0101,ambiguator<A0101>>));
-    LMI_TEST((!std::is_constructible_v<A0202,ambiguator<A0202>>));
-    LMI_TEST((!std::is_constructible_v<A0303,ambiguator<A0303>>));
-    LMI_TEST(( std::is_constructible_v<A0404,ambiguator<A0404>>));
-    LMI_TEST((!std::is_constructible_v<A0505,ambiguator<A0505>>));
-    LMI_TEST((!std::is_constructible_v<A3030,ambiguator<A3030>>));
-
-    LMI_TEST( equiplausible_construct<A0000>());
-    LMI_TEST(!equiplausible_construct<A0101>());
-    LMI_TEST( equiplausible_construct<A0202>());
-    LMI_TEST( equiplausible_construct<A0303>());
-    LMI_TEST(!equiplausible_construct<A0404>());
-    LMI_TEST( equiplausible_construct<A0505>());
-    LMI_TEST( equiplausible_construct<A3030>());
-
-    LMI_TEST( equiplausible_assign<A0000>());
-    LMI_TEST(!equiplausible_assign<A0101>());
-    LMI_TEST( equiplausible_assign<A0202>());
-    LMI_TEST( equiplausible_assign<A0303>());
-    LMI_TEST(!equiplausible_assign<A0404>());
-    LMI_TEST( equiplausible_assign<A0505>());
-    LMI_TEST( equiplausible_assign<A3030>());
-
-    LMI_TEST( copyable<A0000>());
-    LMI_TEST( copyable<A0101>());
-    LMI_TEST( copyable<A0202>());
-    LMI_TEST( copyable<A0303>());
-    LMI_TEST( copyable<A0404>());
-    LMI_TEST( copyable<A0505>());
-    LMI_TEST(!copyable<A3030>());
-
-    LMI_TEST( c_moveable<A0000>());
-    LMI_TEST(!c_moveable<A0101>());
-    LMI_TEST(!c_moveable<A0202>());
-    LMI_TEST(!c_moveable<A0303>());
-    LMI_TEST(!c_moveable<A0404>());
-    LMI_TEST( c_moveable<A0505>()); // move-constructible; not move-assignable
-    LMI_TEST( c_moveable<A3030>());
-
-    LMI_TEST( a_moveable<A0000>());
-    LMI_TEST(!a_moveable<A0101>());
-    LMI_TEST(!a_moveable<A0202>());
-    LMI_TEST(!a_moveable<A0303>());
-    LMI_TEST(!a_moveable<A0404>());
-    LMI_TEST(!a_moveable<A0505>()); // move-constructible; not move-assignable
-    LMI_TEST( a_moveable<A3030>());
+    static_assert( std::is_copy_constructible_v<A0000>);
+    static_assert( std::is_move_constructible_v<A0000>);
+    static_assert(!std::is_constructible_v<A0000,ambiguator<A0000>>);
+    static_assert( copyable<A0000>());
+    static_assert( c_moveable<A0000>());
+    static_assert( a_moveable<A0000>());
+
+    static_assert( std::is_copy_constructible_v<A0000>);
+    static_assert( std::is_copy_constructible_v<A0101>);
+    static_assert( std::is_copy_constructible_v<A0202>);
+    static_assert( std::is_copy_constructible_v<A0303>);
+    static_assert( std::is_copy_constructible_v<A0404>);
+    static_assert( std::is_copy_constructible_v<A0505>);
+    static_assert(!std::is_copy_constructible_v<A3030>);
+
+    static_assert( std::is_move_constructible_v<A0000>);
+    static_assert( std::is_move_constructible_v<A0101>);
+    static_assert(!std::is_move_constructible_v<A0202>);
+    static_assert(!std::is_move_constructible_v<A0303>);
+    static_assert( std::is_move_constructible_v<A0404>);
+    static_assert( std::is_move_constructible_v<A0505>);
+    static_assert( std::is_move_constructible_v<A3030>);
+
+    static_assert( std::is_move_assignable_v<A0000>);
+    static_assert( std::is_move_assignable_v<A0101>);
+    static_assert(!std::is_move_assignable_v<A0202>);
+    static_assert(!std::is_move_assignable_v<A0303>);
+    static_assert( std::is_move_assignable_v<A0404>);
+    static_assert(!std::is_move_assignable_v<A0505>);
+    static_assert( std::is_move_assignable_v<A3030>);
+
+    static_assert(!std::is_constructible_v<A0000,ambiguator<A0000>>);
+    static_assert( std::is_constructible_v<A0101,ambiguator<A0101>>);
+    static_assert(!std::is_constructible_v<A0202,ambiguator<A0202>>);
+    static_assert(!std::is_constructible_v<A0303,ambiguator<A0303>>);
+    static_assert( std::is_constructible_v<A0404,ambiguator<A0404>>);
+    static_assert(!std::is_constructible_v<A0505,ambiguator<A0505>>);
+    static_assert(!std::is_constructible_v<A3030,ambiguator<A3030>>);
+
+    static_assert( equiplausible_construct<A0000>());
+    static_assert(!equiplausible_construct<A0101>());
+    static_assert( equiplausible_construct<A0202>());
+    static_assert( equiplausible_construct<A0303>());
+    static_assert(!equiplausible_construct<A0404>());
+    static_assert( equiplausible_construct<A0505>());
+    static_assert( equiplausible_construct<A3030>());
+
+    static_assert( equiplausible_assign<A0000>());
+    static_assert(!equiplausible_assign<A0101>());
+    static_assert( equiplausible_assign<A0202>());
+    static_assert( equiplausible_assign<A0303>());
+    static_assert(!equiplausible_assign<A0404>());
+    static_assert( equiplausible_assign<A0505>());
+    static_assert( equiplausible_assign<A3030>());
+
+    static_assert( copyable<A0000>());
+    static_assert( copyable<A0101>());
+    static_assert( copyable<A0202>());
+    static_assert( copyable<A0303>());
+    static_assert( copyable<A0404>());
+    static_assert( copyable<A0505>());
+    static_assert(!copyable<A3030>());
+
+    static_assert( c_moveable<A0000>());
+    static_assert(!c_moveable<A0101>());
+    static_assert(!c_moveable<A0202>());
+    static_assert(!c_moveable<A0303>());
+    static_assert(!c_moveable<A0404>());
+    static_assert( c_moveable<A0505>()); // move-constructible; not 
move-assignable
+    static_assert( c_moveable<A3030>());
+
+    static_assert( a_moveable<A0000>());
+    static_assert(!a_moveable<A0101>());
+    static_assert(!a_moveable<A0202>());
+    static_assert(!a_moveable<A0303>());
+    static_assert(!a_moveable<A0404>());
+    static_assert(!a_moveable<A0505>()); // move-constructible; not 
move-assignable
+    static_assert( a_moveable<A3030>());
 
     A0000 a0000 {};
     A0101 a0101 {};



reply via email to

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