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>>
85 static constexpr
bool is_valid(
87 value) 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>>(std::forward<left_t>(left), std::forward<right_t>(right))));
121 template<
class left_t,
class right_t>
122 constexpr
auto assert_ne(left_t&& left, right_t&& right) noexcept(
127 std::is_lvalue_reference_v<left_t>,
128 std::is_lvalue_reference_v<right_t>>(std::forward<left_t>(left), std::forward<right_t>(right))));
141 template<
class left_t,
class right_t>
142 constexpr
auto assert_lt(left_t&& left, right_t&& right) noexcept(
147 std::is_lvalue_reference_v<left_t>,
148 std::is_lvalue_reference_v<right_t>>(std::forward<left_t>(left), std::forward<right_t>(right))));
161 template<
class left_t,
class right_t>
162 constexpr
auto assert_le(left_t&& left, right_t&& right) noexcept(
167 std::is_lvalue_reference_v<left_t>,
168 std::is_lvalue_reference_v<right_t>>(std::forward<left_t>(left), std::forward<right_t>(right))));
181 template<
class left_t,
class right_t>
182 constexpr
auto assert_gt(left_t&& left, right_t&& right) noexcept(
187 std::is_lvalue_reference_v<left_t>,
188 std::is_lvalue_reference_v<right_t>>(std::forward<left_t>(left), std::forward<right_t>(right))));
201 template<
class left_t,
class right_t>
202 constexpr
auto assert_ge(left_t&& left, right_t&& right) noexcept(
206 std::greater_equal<>,
207 std::is_lvalue_reference_v<left_t>,
208 std::is_lvalue_reference_v<right_t>>(std::forward<left_t>(left), 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.