annotate gcc/testsuite/g++.dg/cpp1y/constexpr-array3.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/69995
kono
parents:
diff changeset
2 // { dg-do compile { target c++14 } }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #define assert(X) static_assert((X),#X)
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #define CONSTEXPR constexpr
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 template <typename T, unsigned long Size>
kono
parents:
diff changeset
9 struct array {
kono
parents:
diff changeset
10 T elems_[Size];
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 constexpr T const& operator[](unsigned long n) const
kono
parents:
diff changeset
13 { return elems_[n]; }
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 constexpr T& operator[](unsigned long n)
kono
parents:
diff changeset
16 { return elems_[n]; }
kono
parents:
diff changeset
17 };
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 template <typename T>
kono
parents:
diff changeset
20 CONSTEXPR void my_swap(T& a, T& b) {
kono
parents:
diff changeset
21 T tmp = a;
kono
parents:
diff changeset
22 a = b;
kono
parents:
diff changeset
23 b = tmp;
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 CONSTEXPR auto rotate2() {
kono
parents:
diff changeset
27 array<array<int, 2>, 2> result{};
kono
parents:
diff changeset
28 array<int, 2> a{{0, 1}};
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 result[0] = a;
kono
parents:
diff changeset
31 my_swap(a[0], a[1]);
kono
parents:
diff changeset
32 result[1] = a;
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 return result;
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 int main() {
kono
parents:
diff changeset
38 CONSTEXPR auto indices = rotate2();
kono
parents:
diff changeset
39 assert(indices[0][0] == 0);
kono
parents:
diff changeset
40 assert(indices[0][1] == 1);
kono
parents:
diff changeset
41 assert(indices[1][0] == 1);
kono
parents:
diff changeset
42 assert(indices[1][1] == 0);
kono
parents:
diff changeset
43 }