# std::in_range

< cpp‎ | utility

定义于头文件 `<utility>` |  |
template< class R, class T > constexpr bool in_range( T t ) noexcept; |  | (C++20 起)

若 `t` 的值在能以 `R` 表示的值的范围内，即 `t` 能转换到 `R` 而无数据损失则为 true 。

若 `T` 或 `R` 不是有符号或无符号整数类型（包括标准整数类型与扩展整数类型），则为编译时错误。

### 参数

t | - | 要测试的值

### 返回值

若 `t` 的值可以 `R` 表示则为 true ，否则为 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 。

### 示例

    #include <utility>
    #include <iostream>
    #include <iomanip>

    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