Por que não é permitida a especialização parcial em um argumento não-tipo para usar parâmetros de modelo aninhados

Eu tenho esse código

template<int N, bool C = true>
struct A;

template<int N>
struct A<N, !(N % 5)> {
  /* ... */
};

// should work
A<25> a;

Isso é, para númerosN que são divisíveis por5, o compilador deve usar a especialização parcial. Mas o compilador não aceita essa especialização parcial, porque o Padrão exige que ele rejeite esse código, onde um argumento não-tipológico de uma especialização parcial faz referência a um parâmetro e não é simplesmente um parâmetro (comoA<N, N> seria válido). Mas qual é o motivo disso?

Note que eu posso simplesmente mudar meu código para um exemplo mais prolixo e é válido

template<bool> struct wrap;
template<int N, typename = wrap<true> >
struct A;

template<int N>
struct A<N, wrap<!(N % 5)> > {
  /* ... */
};

// should work
A<25> a;

Isso é bom porque não é mais um parâmetro que não é do tipo. Mas por que a especificação proíbe a especialização parcial mais direta?

questionAnswers(2)

yourAnswerToTheQuestion