1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <array>
11 
12 // tuple_element<I, array<T, N> >::type
13 
14 #include <array>
15 #include <type_traits>
16 
17 template <class T>
test()18 void test()
19 {
20     {
21     typedef T Exp;
22     typedef std::array<T, 3> C;
23     static_assert((std::is_same<typename std::tuple_element<0, C>::type, Exp>::value), "");
24     static_assert((std::is_same<typename std::tuple_element<1, C>::type, Exp>::value), "");
25     static_assert((std::is_same<typename std::tuple_element<2, C>::type, Exp>::value), "");
26     }
27     {
28     typedef T const Exp;
29     typedef std::array<T, 3> const C;
30     static_assert((std::is_same<typename std::tuple_element<0, C>::type, Exp>::value), "");
31     static_assert((std::is_same<typename std::tuple_element<1, C>::type, Exp>::value), "");
32     static_assert((std::is_same<typename std::tuple_element<2, C>::type, Exp>::value), "");
33     }
34     {
35     typedef T volatile Exp;
36     typedef std::array<T, 3> volatile C;
37     static_assert((std::is_same<typename std::tuple_element<0, C>::type, Exp>::value), "");
38     static_assert((std::is_same<typename std::tuple_element<1, C>::type, Exp>::value), "");
39     static_assert((std::is_same<typename std::tuple_element<2, C>::type, Exp>::value), "");
40     }
41     {
42     typedef T const volatile Exp;
43     typedef std::array<T, 3> const volatile C;
44     static_assert((std::is_same<typename std::tuple_element<0, C>::type, Exp>::value), "");
45     static_assert((std::is_same<typename std::tuple_element<1, C>::type, Exp>::value), "");
46     static_assert((std::is_same<typename std::tuple_element<2, C>::type, Exp>::value), "");
47     }
48 }
49 
main()50 int main()
51 {
52     test<double>();
53     test<int>();
54 }
55