最終更新日時: 2026年05月20日 18時07分22秒 (JST)
Akira Takahashi が更新

履歴 編集

class template
<utility>

# std::tuple_size(C++26)

    namespace std {
      template <class T> class tuple_size; // 先行宣言

      template <class T, T... Values>
      struct tuple_size<integer_sequence<T, Values...>>
        : integral_constant<size_t, sizeof...(Values)> {};
    }

## 概要

`tuple_size`は、タプルとして見なせる型の要素数を取得するためのクラスである。

`<utility>`ヘッダでは、`integer_sequence`に関する特殊化を提供する。これにより、構造化束縛および`template for`文で`integer_sequence`を使用できる。

## 例

### 基本的な使い方

    #include <utility>

    int main()
    {
      static_assert(std::tuple_size<std::integer_sequence<int, 0, 1, 2>>::value == 3);
    }

#### 出力

### 構造化束縛で使用する

構造化束縛は`tuple_size`の値を要素数として認識する。

    #include <iostream>
    #include <utility>

    template <std::size_t Count>
    void print_indices() {
      // tuple_sizeが要素数Countを伝え、tuple_element/getで各値が取り出される
      constexpr auto [...Index] = std::make_index_sequence<Count>{};
      ((std::cout << Index << ' '), ...);
      std::cout << std::endl;
    }

    int main()
    {
      print_indices<3>();
    }

#### 出力

    0 1 2

### `template for`文で使用する

`template for`文は`tuple_size`の値分だけ本体を展開する。

    #include <iostream>
    #include <utility>

    int main()
    {
      // tuple_sizeが要素数3を伝え、本体が3回展開される
      template for (auto I : std::make_index_sequence<3>{}) {
        std::cout << I << ' ';
      }
      std::cout << std::endl;
    }

#### 出力

    0 1 2

## バージョン

### 言語

- C++26

### 処理系

- Clang: 23 ✅
- GCC: 16.1 ✅
- Visual C++: 2026 Update 2 ❌

## 参照

- P1789R3 Library Support for Expansion Statements