Details
-
User Story
-
Resolution: Unresolved
-
P2: Important
-
None
-
None
-
None
-
5
-
Foundation PM Prioritized
Description
Following the implementation of QTBUG-98873, I would also like a QCOMPARE macro that tests my C++20 spaceship operators <=>. It's tedious to use the moral equivalents of
QVERIFY((a <=> b) == r); QCOMPARE(a <=> b, r);
esp since the std::*_ordering types don't support comparing two objects of their type with each other.
Locally, I have defined me a
#define COMPARE_3WAY(a, b, r) \ do { \ static_assert(std::is_same_v<decltype((a) <=> (b)), decltype(r)>) ; \ const auto actual = (a) <=> (b); \ QCOMPARE(std::is_eq(actual), std::is_eq(r); \ QCOMPARE(std::is_lt(actual), std::is_lt(r); \ QCOMPARE(std::is_gt(actual), std::is_gt(r); \ } while (0)
But that, of course, doesn't output the values of a, b, and r upon failure, and doesn't work with strong_ordering::equivalent).
Attachments
Issue Links
- is required for
-
QTBUG-104111 Modernize comparisons [Core: Date/Time]
- Open
-
QTBUG-104113 Modernize comparisons: can we provide macros?
- Open