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 // type_traits
11
12 // extent
13
14 #include <type_traits>
15
16 template <class T, unsigned A>
test_extent()17 void test_extent()
18 {
19 static_assert((std::extent<T>::value == A), "");
20 static_assert((std::extent<const T>::value == A), "");
21 static_assert((std::extent<volatile T>::value == A), "");
22 static_assert((std::extent<const volatile T>::value == A), "");
23 }
24
25 template <class T, unsigned A>
test_extent1()26 void test_extent1()
27 {
28 static_assert((std::extent<T, 1>::value == A), "");
29 static_assert((std::extent<const T, 1>::value == A), "");
30 static_assert((std::extent<volatile T, 1>::value == A), "");
31 static_assert((std::extent<const volatile T, 1>::value == A), "");
32 }
33
34 class Class
35 {
36 public:
37 ~Class();
38 };
39
main()40 int main()
41 {
42 test_extent<void, 0>();
43 test_extent<int&, 0>();
44 test_extent<Class, 0>();
45 test_extent<int*, 0>();
46 test_extent<const int*, 0>();
47 test_extent<int, 0>();
48 test_extent<double, 0>();
49 test_extent<bool, 0>();
50 test_extent<unsigned, 0>();
51
52 test_extent<int[2], 2>();
53 test_extent<int[2][4], 2>();
54 test_extent<int[][4], 0>();
55
56 test_extent1<int, 0>();
57 test_extent1<int[2], 0>();
58 test_extent1<int[2][4], 4>();
59 test_extent1<int[][4], 4>();
60 }
61