Spec-Zone.ru › C++

std::in_range

Определено в заголовке <utility>
template< class R, class T >
constexpr bool in_range( T t ) noexcept;
(начиная с C++20)

Возвращает true, если значение t находится в диапазоне значений, представимых в R, то есть если t можно преобразовать в R без потери значения.

Если T или U имеет не-целочисленный тип, символьный тип или является bool, возникает ошибка компиляции.

Параметры

t - проверяемое значение

Возвращаемое значение

true, если значение t представимо в R, и false в противном случае.

Возможная реализация

template<class R, class T>
constexpr bool in_range(T t) noexcept
{
    return std::cmp_greater_equal(t, std::numeric_limits<R>::min()) &&
        std::cmp_less_equal(t, std::numeric_limits<R>::max());
}

Примечания

Эту функцию нельзя использовать с перечислениями (включая std::byte), char, char8_t, char16_t, char32_t, wchar_t и bool.

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_integer_comparison_functions 202002L (C++20) Функции сравнения целых чисел

Пример

#include <iostream>
#include <utility>

int main()
{
    std::cout << std::boolalpha;

    std::cout << std::in_range<std::size_t>(-1) << '\n';
    std::cout << std::in_range<std::size_t>(42) << '\n';
}

Вывод:

false
true

См. также

ranges::min
(C++20)
возвращает наименьшее из заданных значений
(функциональный объект алгоритма)
ranges::max
(C++20)
возвращает наибольшее из заданных значений
(функциональный объект алгоритма)
ranges::clamp
(C++20)
ограничивает значение заданными нижней и верхней границами
(функциональный объект алгоритма)
lerp
(C++20)
функция линейной интерполяции
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/in_range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API