namespace std {
template <std::size_t... I>
using index_sequence = integer_sequence<std::size_t, I...>;
}
概要
index_sequence
は、size_t
型のシーケンスをコンパイル時に表現する、integer_sequence
クラスの別名である。
例
#include <iostream>
#include <utility>
void g(std::size_t a, std::size_t b, std::size_t c)
{
std::cout << a << ", " << b << ", " << c << std::endl;
}
template <std::size_t... Seq>
void f(std::index_sequence<Seq...>)
{
// 定数のシーケンス{0, 1, 2}を取り出して、関数g()の引数として転送
g(Seq...);
}
int main()
{
f(std::index_sequence<0, 1, 2>());
}
出力
0, 1, 2
バージョン
言語
- C++14
処理系
- Clang: 3.4 ✅
- GCC: 4.9.0 ✅
- ICC: ??
- Visual C++: 2015 ✅
備考
- GCC 4.9.2で、
std::index_sequence
を関数のパラメータとして受け取るとコンパイルエラーになる問題があった(Bug 65790)。GCC 5.2.0で修正された。