1 // P0634R3
2 // { dg-do compile { target c++2a } }
3
4 // Not in namespace scope.
5 template<typename T>
fn1()6 void fn1 ()
7 {
8 // init-statement -> simple-declaration
9 if (T::X r = 0; 0) // { dg-error "need .typename.|expected" }
10 ;
11
12 for (T::X g = 0; ;) // { dg-error "need .typename.|expected" }
13 ;
14 }
15
16 template<typename T>
17 void
fn2()18 fn2 ()
19 {
20 T::X fn3 (); // { dg-error "need .typename.|expected" }
21 T::X v1; // { dg-error "need .typename.|expected" }
22 T::X v2 = 0; // { dg-error "need .typename.|expected" }
23 T::X v3{0}; // { dg-error "need .typename.|expected" }
24 static constexpr T::X v4 = 0; // { dg-error "need .typename." }
25 typedef T::X T2; // { dg-error "need .typename." }
26 }
27