// RUN: %clang_cc1 -std=c++2c -verify %s template auto Var> struct A{}; template auto Var> struct B{}; template auto Var> struct C{}; template concept C> struct D{}; template concept C> struct E{}; template auto Var> int V1; template auto Var> int V2; template auto Var> int V3; template concept C> int V4; template concept C> int V5; namespace packs { template auto... Var> struct A{}; template auto... Var> struct B{}; template auto... Var> struct C{}; template concept... C> struct D{}; template concept... C> struct E{}; template auto... Var> int V1; template auto... Var> int V2; template auto... Var> int V3; template concept... C> int V4; template concept... C> int V5; } namespace concepts { template concept...> struct A{}; template concept... C> struct B{}; template concept& C> // expected-error{{expected identifier}} \ // expected-error {{in declaration of struct 'C'}} struct C{}; } namespace vars { template auto...> struct A{}; template auto & C> // expected-error {{expected identifier}} \ // expected-error {{extraneous 'template<>'}} struct B{}; template const auto> // expected-error {{expected identifier}} \ // expected-error {{extraneous 'template<>'}} struct C{}; } namespace errors { template // expected-error {{expected template parameter}} \ // expected-error {{extraneous 'template<>' in declaration of struct 'A'}} struct A{}; template auto> // expected-error {{expected template parameter}} \ // expected-error {{template template parameter must have its own template parameters}} struct B{}; }