16 #include <type_traits>
39 template<
class left_t,
class right_t,
class operation_t,
bool bLeftIsLvalue,
bool bRightIsLvalue>
49 std::is_nothrow_constructible_v<left_t, left_t&&> && std::is_nothrow_constructible_v<right_t, right_t&&>);
55 constexpr
bool result()
const noexcept(noexcept(operation_t {}(
left(),
right())));
61 constexpr
explicit operator bool()
const noexcept(noexcept(
result()));
67 constexpr
const auto&
left()
const noexcept;
73 constexpr
const auto&
right()
const noexcept;
82 template<
class left_t,
class right_t,
class operation_t,
bool bLeftIsLvalue,
bool bRightIsLvalue>
83 struct predicates::validator<details::assert_comparison<left_t, right_t, operation_t, bLeftIsLvalue, bRightIsLvalue>>
87 noexcept(noexcept(value.
result()));
101 template<
class left_t,
class right_t>
102 constexpr
auto assert_eq(left_t&& left, right_t&& right) noexcept(
107 std::is_lvalue_reference_v<left_t>,
108 std::is_lvalue_reference_v<right_t>>(
109 std::forward<left_t>(left),
110 std::forward<right_t>(right))));
123 template<
class left_t,
class right_t>
124 constexpr
auto assert_ne(left_t&& left, right_t&& right) noexcept(
129 std::is_lvalue_reference_v<left_t>,
130 std::is_lvalue_reference_v<right_t>>(
131 std::forward<left_t>(left),
132 std::forward<right_t>(right))));
145 template<
class left_t,
class right_t>
146 constexpr
auto assert_lt(left_t&& left, right_t&& right) noexcept(
151 std::is_lvalue_reference_v<left_t>,
152 std::is_lvalue_reference_v<right_t>>(
153 std::forward<left_t>(left),
154 std::forward<right_t>(right))));
167 template<
class left_t,
class right_t>
168 constexpr
auto assert_le(left_t&& left, right_t&& right) noexcept(
173 std::is_lvalue_reference_v<left_t>,
174 std::is_lvalue_reference_v<right_t>>(
175 std::forward<left_t>(left),
176 std::forward<right_t>(right))));
189 template<
class left_t,
class right_t>
190 constexpr
auto assert_gt(left_t&& left, right_t&& right) noexcept(
195 std::is_lvalue_reference_v<left_t>,
196 std::is_lvalue_reference_v<right_t>>(
197 std::forward<left_t>(left),
198 std::forward<right_t>(right))));
211 template<
class left_t,
class right_t>
212 constexpr
auto assert_ge(left_t&& left, right_t&& right) noexcept(
216 std::greater_equal<>,
217 std::is_lvalue_reference_v<left_t>,
218 std::is_lvalue_reference_v<right_t>>(
219 std::forward<left_t>(left),
220 std::forward<right_t>(right))));
constexpr auto assert_ge(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::greater_equal<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare whether left value is greater than or equal to right value and preserve values for assertion ...
constexpr auto assert_le(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::less_equal<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare whether left value is less than or equal to right value and preserve values for assertion dia...
constexpr auto assert_gt(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::greater<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare whether left value is greater than right value and preserve values for assertion diagnostics.
constexpr auto assert_lt(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::less<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare whether left value is less than right value and preserve values for assertion diagnostics.
constexpr auto assert_ne(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::not_equal_to<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare two values for inequality and preserve values for assertion diagnostics.
constexpr auto assert_eq(left_t &&left, right_t &&right) noexcept(noexcept(details::assert_comparison< left_t, right_t, std::equal_to<>, std::is_lvalue_reference_v< left_t >, std::is_lvalue_reference_v< right_t >>(std::forward< left_t >(left), std::forward< right_t >(right))))
Compare two values for equality and preserve values for assertion diagnostics.
Lightweight assertion comparison object that preserves compared operand values for diagnostics.
constexpr const auto & left() const noexcept
Get left operand.
constexpr const auto & right() const noexcept
Get right operand.
constexpr bool result() const noexcept(noexcept(operation_t {}(left(), right())))
Evaluate comparison.
constexpr assert_comparison(left_t &&left, right_t &&right) noexcept(std::is_nothrow_constructible_v< left_t, left_t && > &&std::is_nothrow_constructible_v< right_t, right_t && >)
Construct comparison object from two operands.