// 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; template static int y; // expected-warning {{cannot be deduced}} expected-note {{'Inner'}} template static int y; // expected-error {{does not specialize}} }; template template int X::y; // expected-warning {{cannot be deduced}} expected-note {{'Inner'}} template template int X::y; // expected-error {{does not specialize}} // FIXME: Merging this with the above class causes an assertion failure when // instantiating one of the bogus partial specializations. template struct Y { template static int y; }; template<> template int Y::y; // expected-error {{does not specialize}}