24 static constexpr int value_min = (B == A) ? 0 : A;
25 static constexpr int value_max = (B == A) ? A : B;
27 static_assert(value_min < value_max);
35 constexpr explicit operator value_type ()
noexcept
40 [[nodiscard]]
constexpr ranged_numeric(
signed long long rhs) noexcept : value(narrow_cast<T>(rhs))
42 tt_axiom(value >= value_min && value < value_max);
45 [[nodiscard]]
constexpr ranged_numeric(
unsigned long long rhs) noexcept : value(narrow_cast<T>(rhs))
47 tt_axiom(value >= value_min && value < value_max);
50 [[nodiscard]]
constexpr ranged_numeric(
signed long rhs) noexcept : value(narrow_cast<T>(rhs))
52 tt_axiom(value >= value_min && value < value_max);
55 [[nodiscard]]
constexpr ranged_numeric(
unsigned long rhs) noexcept : value(narrow_cast<T>(rhs))
57 tt_axiom(value >= value_min && value < value_max);
60 [[nodiscard]]
constexpr ranged_numeric(
signed int rhs) noexcept : value(narrow_cast<T>(rhs))
62 tt_axiom(value >= value_min && value < value_max);
65 [[nodiscard]]
constexpr ranged_numeric(
unsigned int rhs) noexcept : value(narrow_cast<T>(rhs))
67 tt_axiom(value >= value_min && value < value_max);
70 [[nodiscard]]
constexpr ranged_numeric(
signed short rhs) noexcept : value(narrow_cast<T>(rhs))
72 tt_axiom(value >= value_min && value < value_max);
75 [[nodiscard]]
constexpr ranged_numeric(
unsigned short rhs) noexcept : value(narrow_cast<T>(rhs))
77 tt_axiom(value >= value_min && value < value_max);
80 [[nodiscard]]
constexpr ranged_numeric(
signed char rhs) noexcept : value(narrow_cast<T>(rhs))
82 tt_axiom(value >= value_min && value < value_max);
85 [[nodiscard]]
constexpr ranged_numeric(
unsigned char rhs) noexcept : value(narrow_cast<T>(rhs))
87 tt_axiom(value >= value_min && value < value_max);
92 tt_axiom(value < value_max - 1);
99 tt_axiom(value > value_min);
106 return lhs.value == rhs.value;
111 return lhs.value != rhs.value;
116 return lhs.value < rhs.value;
121 return lhs.value > rhs.value;
126 return lhs.value <= rhs.value;
131 return lhs.value >= rhs.value;
134 [[nodiscard]]
static constexpr auto range()
noexcept
136 tt_assert(value_max - value_min < 10,
"Don't use this until std::views::iota() is implemented");
139 r.
reserve(value_max - value_min);
140 for (
auto i = value_min; i != value_max; ++i) {