namespace std {
template <std::size_t I, class T> class tuple_element; // 先行宣言
template <std::size_t I, class T, std::size_t N>
struct tuple_element<I, array<T, N>> {
static_assert(I < N, implementation-defined);
using type = T;
};
}
概要
tuple_elementは、タプルとして見なせる型から、I番目の要素型を取得するためのクラスである。
<array>ヘッダでは、arrayクラスに関する特殊化を定義する。
arrayの特殊化では、tuple_element::typeは常にTである。
適格要件
I < Nであること
例
#include <array>
#include <type_traits>
int main()
{
static_assert(std::is_same<
std::tuple_element<0, std::array<int, 2>>::type,
int
>::value, "");
static_assert(std::is_same<
std::tuple_element<1, std::array<int, 2>>::type,
int
>::value, "");
}
出力
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2008 (std::tr1) ✅, 2010 ✅, 2012 ✅
備考
GCC 4.7、およびVisual C++ 10.0のarrayに対するtuple_elementの特殊化では、Iの境界チェックがない。