1*2efd3057SRichard Trieu // RUN: %clang_cc1 %s -verify 2*2efd3057SRichard Trieu 3*2efd3057SRichard Trieu namespace N1 { 4*2efd3057SRichard Trieu template <typename... Ts> 5*2efd3057SRichard Trieu struct Foo { 6*2efd3057SRichard Trieu template <typename T> 7*2efd3057SRichard Trieu struct Bar { 8*2efd3057SRichard Trieu static constexpr bool is_present = false; 9*2efd3057SRichard Trieu }; 10*2efd3057SRichard Trieu }; 11*2efd3057SRichard Trieu 12*2efd3057SRichard Trieu template <typename T, typename... Ts> 13*2efd3057SRichard Trieu struct Foo<T, Ts...> : public Foo<Ts...> { 14*2efd3057SRichard Trieu using template Foo<Ts...>::Bar; 15*2efd3057SRichard Trieu // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} 16*2efd3057SRichard Trieu }; 17*2efd3057SRichard Trieu } 18*2efd3057SRichard Trieu 19*2efd3057SRichard Trieu namespace N2 { 20*2efd3057SRichard Trieu namespace foo { 21*2efd3057SRichard Trieu using I = int; 22*2efd3057SRichard Trieu } 23*2efd3057SRichard Trieu using template namespace foo; 24*2efd3057SRichard Trieu // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} 25*2efd3057SRichard Trieu using template template namespace foo; 26*2efd3057SRichard Trieu // expected-error@-1 2{{'template' keyword not permitted after 'using' keyword}} 27*2efd3057SRichard Trieu I i; 28*2efd3057SRichard Trieu } 29*2efd3057SRichard Trieu 30*2efd3057SRichard Trieu namespace N3 { 31*2efd3057SRichard Trieu namespace foo { 32*2efd3057SRichard Trieu using I = int; 33*2efd3057SRichard Trieu } 34*2efd3057SRichard Trieu using template foo::I; 35*2efd3057SRichard Trieu // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} 36*2efd3057SRichard Trieu I i; 37*2efd3057SRichard Trieu } 38*2efd3057SRichard Trieu 39*2efd3057SRichard Trieu namespace N4 { 40*2efd3057SRichard Trieu template <typename T> 41*2efd3057SRichard Trieu class A {}; 42*2efd3057SRichard Trieu 43*2efd3057SRichard Trieu template <typename T> 44*2efd3057SRichard Trieu using B = A<T>; 45*2efd3057SRichard Trieu B<int> b; 46*2efd3057SRichard Trieu 47*2efd3057SRichard Trieu using template <typename T> C = A<T>; 48*2efd3057SRichard Trieu // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} 49*2efd3057SRichard Trieu // expected-error@-2 {{expected unqualified-id}} 50*2efd3057SRichard Trieu C<int> c; 51*2efd3057SRichard Trieu // expected-error@-1 {{no template named 'C'}} 52*2efd3057SRichard Trieu } 53