# std::tuple_size<std::pair>

< cpp‎ | utility‎ | pair

定义于头文件 `<utility>` |  |
template <class T1, class T2> struct tuple_size<std::pair<T1, T2>> : std::integral_constant<std::size_t, 2> { }; |  | (C++11 起)

std::tuple_size 对 pair 的部分特化提供使用类 tuple 语法，在编译时获得 pair 中元素数的方法，该数总是 2 。

## 继承自 std::integral_constant

### 成员常量

value [静态] | 常数值 2 (公开静态成员常量)

### 成员函数

operator std::size_t | 转换对象为 std::size_t ，返回 `value` (公开成员函数)
operator() (C++14) | 返回 `value` (公开成员函数)

### 成员类型

类型 | 定义
`value_type` | `std::size_t`
`type` | std::integral_constant<std::size_t, value>

### 示例

    #include <iostream>
    #include <utility>
    #include <tuple>

    template<class T>
    void test(T t)
    {
        int a[std::tuple_size<T>::value]; // 可用于编译时
        std::cout << std::tuple_size<T>::value << '\n'; // 或运行时
    }

    int main()
    {
        test(std::make_tuple(1, 2, 3.14));
        test(std::make_pair(1, 3.14));
    }

输出：

    3
    2

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 2313 | C++11 | 未要求对 `pair` 的特化派生自 `integral_constant` | 已要求

### 参阅

结构化绑定 (C++17) | 绑定指定的名字到初始化器的子对象或元组元素
std::tuple_size<std::tuple> (C++11) | 在编译时获得 `tuple` 的大小 (类模板特化)
std::tuple_size<std::array> (C++11) | 获得 `array` 的大小 (类模板特化)
std::tuple_element<std::pair> (C++11) | 获得 `pair` 中元素的类型 (类模板特化)