21 template<auto left, auto right,
typename compare_t>
24 static_assert(compare_t()(left, right));
27 template<auto left, auto right>
30 static_assert(std::equal_to<>()(left, right),
"!(left == right)");
33 template<auto left, auto right>
36 static_assert(std::not_equal_to<>()(left, right),
"!(left != right)");
39 template<auto left, auto right>
42 static_assert(std::less<>()(left, right),
"!(left < right)");
45 template<auto left, auto right>
48 static_assert(std::less_equal<>()(left, right),
"!(left <= right)");
51 template<auto left, auto right>
54 static_assert(std::greater<>()(left, right),
"!(left > right)");
57 template<auto left, auto right>
60 static_assert(std::greater_equal<>()(left, right),
"!(left >= right)");
63 template<auto left, auto value, auto right>
66 static_assert(
qx::between(left, value, right),
"value is not between right and left");
74 #define QX_STATIC_ASSERT_EQ(left, right) \
75 constexpr qx::details::static_assert_two<(left), (right), std::equal_to<>> QX_LINE_NAME(_static_assert_eq_)
77 #define QX_STATIC_ASSERT_NE(left, right) \
78 constexpr qx::details::static_assert_two<(left), (right), std::not_equal_to<>> QX_LINE_NAME(_static_assert_nq_)
80 #define QX_STATIC_ASSERT_LT(left, right) \
81 constexpr qx::details::static_assert_two<(left), (right), std::less<>> QX_LINE_NAME(_static_assert_lt_)
83 #define QX_STATIC_ASSERT_LE(left, right) \
84 constexpr qx::details::static_assert_two<(left), (right), std::less_equal<>> QX_LINE_NAME(_static_assert_le_)
86 #define QX_STATIC_ASSERT_GT(left, right) \
87 constexpr qx::details::static_assert_two<(left), (right), std::greater<>> QX_LINE_NAME(_static_assert_gt_)
89 #define QX_STATIC_ASSERT_GE(left, right) \
90 constexpr qx::details::static_assert_two<(left), (right), std::greater_equal<>> QX_LINE_NAME(_static_assert_ge_)
99 #define QX_STATIC_ASSERT_BETWEEN(left, value, right) \
100 qx::details::static_assert_between<(left), (value), (right)> QX_LINE_NAME(static_assert_between_)
131 #define QX_STATIC_ASSERT_NO_INSTANTIATION(Message) \
132 []<bool flag = false>() \
134 static_assert(flag, Message); \
constexpr bool between(T left, T value, T right, compare_t compare)
Checks if value is between left and right.