1 // PR c++/9634, c++/29469, c++/29607
2 // Contributed by: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
3 // DR224: Make sure that a name is *truly* semantically dependent.
19 typedef A<T>::Bar type3;
20 typedef A<T*>::Bar type4; // { dg-error "" "" { target c++17_down } }
21 typedef typename A<T*>::Bar type5;
24 typedef A::N<int> type7;
25 typedef A<T>::N<int> type8;
26 typedef A<T*>::template N<int> type9; // { dg-error "" "" { target c++17_down } }
27 typedef typename A<T*>::template N<int> type10;
30 struct N2 { typedef int K; };
32 // Check that A::N2 is still considered dependent (because it
33 // could be specialized), while A::Bar2 (being just ::D) is not.
34 typedef A::Bar2 type11;
38 typedef typename type12::K k2;
39 typedef type12::K k1; // { dg-error "" "" { target c++17_down } }
41 // Check that A::Bar2 is not considered dependent even if we use
42 // the typename keyword.
43 typedef typename A::Bar2 type13;