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 ❌