// RUN: %clang_cc1 -std=c++1y -fsyntax-only -verify %s // -- The argument list of the specialization shall not be identical // to the implicit argument list of the primary template. template class X> int v1; template class X> int v1; // expected-error@-1{{variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list}} template int v2; template int v2; // expected-error@-1{{variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list}} template int v3; template int v3; // expected-error@-1{{variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list}} template class...X> int v4; template class...X> int v4; // expected-error@-1{{variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list}} template struct X { template static int y; // FIXME: It would be preferable to only diagnose this once. template static int y; // expected-error 3{{cannot be deduced}} expected-note 3{{'Inner'}} template static int y; // expected-error {{does not specialize}} template static int z; template static int z; // expected-error {{not implicitly convertible}} }; template template int X::y; // expected-error {{cannot be deduced}} expected-note {{'Inner'}} template template int X::y; // expected-error {{does not specialize}} template<> template int X::y; // expected-error {{does not specialize}} expected-note {{instantiation of}} X xi; X xf; // expected-note {{instantiation of}}