]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/g++.dg/cpp1z/decomp11.C
invoke.texi: Document -std=c++17 and -std=gnu++17 and document c++1z and gnu++1z...
[thirdparty/gcc.git] / gcc / testsuite / g++.dg / cpp1z / decomp11.C
1 // Test for decltype of direct decomposition.
2 // { dg-options -std=c++17 }
3
4 template <class,class> struct same_type;
5 template <class T> struct same_type<T,T> {};
6
7 struct A {
8 int i;
9 const int ci = 42;
10 mutable int mi;
11 int& r = i;
12 const int& cr = ci;
13 } a;
14
15 void f() {
16 auto [i,ci,mi,r,cr] = a;
17
18 same_type<decltype(i),int>{};
19 same_type<decltype(ci),const int>{};
20 same_type<decltype(mi),int>{};
21 same_type<decltype(r),int&>{};
22 same_type<decltype(cr),const int&>{};
23 }
24 void frr() {
25 auto &&[i,ci,mi,r,cr] = a;
26
27 same_type<decltype(i),int>{};
28 same_type<decltype(ci),const int>{};
29 same_type<decltype(mi),int>{};
30 same_type<decltype(r),int&>{};
31 same_type<decltype(cr),const int&>{};
32 }
33 void fc() {
34 const auto [i,ci,mi,r,cr] = a;
35
36 same_type<decltype(i),const int>{};
37 same_type<decltype(ci),const int>{};
38 same_type<decltype(mi),int>{};
39 same_type<decltype(r),int&>{};
40 same_type<decltype(cr),const int&>{};
41 }
42 void frc() {
43 const A ca{};
44 auto &[i,ci,mi,r,cr] = ca;
45
46 same_type<decltype(i),const int>{};
47 same_type<decltype(ci),const int>{};
48 same_type<decltype(mi),int>{};
49 same_type<decltype(r),int&>{};
50 same_type<decltype(cr),const int&>{};
51 }