Да, согласно [temp.arg.template] / 2 :
Любые частичные специализации , связанные с шаблоном первичного класса или первичным шаблоном переменной , рассматриваются, когда создается специализация на основе параметра шаблона шаблона. ...
И [temp.expl.spec] / 7 :
... размещение объявлений частичной специализации шаблонов классов, шаблонов переменных , шаблонов классов-членов не шаблонных классов, шаблонов-членов статических данных не-шаблонных классов, шаблоны классов-членов, шаблоны классов и т. д. ...
Это также упоминается в [constraints.namespace.std] / 3 :
Поведение программы на C ++ не определено, если она объявляет явную или частичную специализацию любой стандартной библиотеки шаблон переменной , за исключением случаев, когда это явно разрешено спецификацией этого шаблона переменной.
Не говоря уже о том, что все основные компиляторы (Clang, GCC и MSVC) не имеют с ними проблем:
template <int x, int y>
constexpr int foo = -1;
template <>
constexpr float foo<1, 0> = 1.0;
template <int x>
constexpr double foo<1, x> = 1.1;
int main()
{
static_assert(foo<0, 0> == -1, "");
static_assert(foo<0, 1> == -1, "");
static_assert(foo<1, 0> == 1.0, "");
static_assert(foo<1, 1> == 1.1, "");
}
https://godbolt.org/z/R1c1zo