annotate gcc/testsuite/g++.dg/cpp1z/decomp35.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/83958
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-options "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 template <typename = void> struct A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 class B;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 template <typename, typename, typename = A<>> class C;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 template <typename, typename> struct D;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 template <typename T, typename U, typename V, typename, typename, typename W>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 struct E {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 using X = W;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 X operator* ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 T operator++ ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 template <typename P, typename R, typename S, typename Q>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 bool operator!= (E<P, U, V, R, S, Q>);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 template <typename T, typename U, typename>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 struct F {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 class G;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 using H = D<T, U>;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 using I = E<G, T, U, G, H, H &>;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 class G : public I {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 G begin ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 G end ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 template <typename T, typename U, typename V> struct C : F<T, U, V> {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 using J = F<T, U, V>;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 using J::begin;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 using J::end;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 using K = class L;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 struct M {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 void foo () { for (auto & [ a ] : m) {} } // { dg-error "incomplete type" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 C<K, B> m; // { dg-warning "only available with" "" { target c++14_down } .-1 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 };