| // RUN: %clang_cc1 %s -verify | |
| namespace N1 { | |
| template <typename... Ts> | |
| struct Foo { | |
| template <typename T> | |
| struct Bar { | |
| static constexpr bool is_present = false; | |
| }; | |
| }; | |
| template <typename T, typename... Ts> | |
| struct Foo<T, Ts...> : public Foo<Ts...> { | |
| using template Foo<Ts...>::Bar; | |
| // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} | |
| }; | |
| } | |
| namespace N2 { | |
| namespace foo { | |
| using I = int; | |
| } | |
| using template namespace foo; | |
| // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} | |
| using template template namespace foo; | |
| // expected-error@-1 2{{'template' keyword not permitted after 'using' keyword}} | |
| I i; | |
| } | |
| namespace N3 { | |
| namespace foo { | |
| using I = int; | |
| } | |
| using template foo::I; | |
| // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} | |
| I i; | |
| } | |
| namespace N4 { | |
| template <typename T> | |
| class A {}; | |
| template <typename T> | |
| using B = A<T>; | |
| B<int> b; | |
| using template <typename T> C = A<T>; | |
| // expected-error@-1 {{'template' keyword not permitted after 'using' keyword}} | |
| // expected-error@-2 {{expected unqualified-id}} | |
| C<int> c; | |
| // expected-error@-1 {{no template named 'C'}} | |
| } |