- utility[meta header]
- std[meta namespace]
- class template[meta id-type]
- cpp26[meta cpp]
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)> {};
}- integral_constant[link /reference/type_traits/integral_constant.md]
- integer_sequence[link ../integer_sequence.md]
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);
}- std::tuple_size[color ff0000]
構造化束縛は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>();
}- std::make_index_sequence[link ../make_index_sequence.md]
0 1 2
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;
}- std::make_index_sequence[link ../make_index_sequence.md]
0 1 2
- C++26
- Clang: 23 [mark verified]
- GCC: 16.1 [mark verified]
- Visual C++: 2026 Update 2 [mark noimpl]