Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/SelfTest/IntrospectiveTests/Traits.tests.cpp
diff options
context:
space:
mode:
authorMartin Hořeňovský2022-11-01 15:01:43 +0100
committerMartin Hořeňovský2022-11-04 19:24:44 +0100
commitec59cd8736b7ee8fcd69c76c71c2a0b72293b00c (patch)
tree1cb8b66b56e6fe4fe6307e88e32c18d69c2a89a7 /tests/SelfTest/IntrospectiveTests/Traits.tests.cpp
parentd7f8c36e4cb856ee632b4ca01f8d5847984aa276 (diff)
downloadcatch3-ec59cd8736b7ee8fcd69c76c71c2a0b72293b00c.tar.gz
Support decomposing types that only compare with literal 0
This is primarily done to support new `std::*_ordering` types, but the refactoring also supports any other type with this property. The compilation overhead is surprisingly low. Testing it with clang on a Linux machine, compiling our SelfTest project takes only 2-3% longer with these changes than it takes otherwise. Closes #2555
Diffstat (limited to 'tests/SelfTest/IntrospectiveTests/Traits.tests.cpp')
-rw-r--r--tests/SelfTest/IntrospectiveTests/Traits.tests.cpp31
1 files changed, 1 insertions, 30 deletions
diff --git a/tests/SelfTest/IntrospectiveTests/Traits.tests.cpp b/tests/SelfTest/IntrospectiveTests/Traits.tests.cpp
index 35d30c76..459e0d48 100644
--- a/tests/SelfTest/IntrospectiveTests/Traits.tests.cpp
+++ b/tests/SelfTest/IntrospectiveTests/Traits.tests.cpp
@@ -8,36 +8,7 @@
#include <catch2/catch_test_macros.hpp>
#include <catch2/internal/catch_compare_traits.hpp>
-
-// Should only be constructible from literal 0.
-// Used by `TypeWithLit0Comparisons` for testing comparison
-// ops that only work with literal zero, the way std::*orderings do
-struct ZeroLiteralDetector {
- constexpr ZeroLiteralDetector( ZeroLiteralDetector* ) noexcept {}
-
- template <typename T,
- typename = std::enable_if_t<!std::is_same<T, int>::value>>
- constexpr ZeroLiteralDetector( T ) = delete;
-};
-
-struct TypeWithLit0Comparisons {
-#define DEFINE_COMP_OP( op ) \
- friend bool operator op( TypeWithLit0Comparisons, ZeroLiteralDetector ) { \
- return true; \
- } \
- friend bool operator op( ZeroLiteralDetector, TypeWithLit0Comparisons ) { \
- return false; \
- }
-
- DEFINE_COMP_OP( < )
- DEFINE_COMP_OP( <= )
- DEFINE_COMP_OP( > )
- DEFINE_COMP_OP( >= )
- DEFINE_COMP_OP( == )
- DEFINE_COMP_OP( != )
-
-#undef DEFINE_COMP_OP
-};
+#include <helpers/type_with_lit_0_comparisons.hpp>
#define ADD_TRAIT_TEST_CASE( op ) \