38 constexpr interval(T m, T s) noexcept : min(m), sup(s)
43 template<std::
floating_po
int T1, std::
floating_po
int T2>
44 requires std::floating_point<T>
45 constexpr interval(T1 m, T2 s) : interval(
static_cast<T
>(m),
51 template<std::
integral T1, std::
integral T2>
52 requires std::integral<T>
53 constexpr interval(T1 m, T2 s) : interval(
static_cast<T
>(m),
56 Expects(std::cmp_less(m, s));
57 Expects(std::in_range<T>(m));
58 Expects(std::in_range<T>(s));
61 template<std::
floating_po
int T1, std::
floating_po
int T2>
62 requires std::floating_point<T>
63 explicit constexpr interval(
const std::pair<T1, T2> &p)
64 : interval(
static_cast<T
>(p.first),
static_cast<T
>(p.second))
66 Expects(p.first < p.second);
69 template<std::
integral T1, std::
integral T2>
70 requires std::integral<T>
71 explicit constexpr interval(
const std::pair<T1, T2> &p)
72 : interval(
static_cast<T
>(p.first),
static_cast<T
>(p.second))
74 Expects(std::cmp_less(p.first, p.second));
75 Expects(std::in_range<T>(p.first));
76 Expects(std::in_range<T>(p.second));
79 [[nodiscard]]
friend constexpr bool operator==(
80 const interval &,
const interval &)
noexcept =
default;
82 [[nodiscard]]
bool is_valid()
const noexcept