Construtor com argumentos de modelo não-tipo

Noessa questão afirma-se que é impossível usar apenas argumentos de modelo diretamente para o construtor de classes, porque se você escrever algo como

struct S{
    template<typename T>
    S() { ... }
}

Então você não tem como chamar esse construtor. No entanto, existem algumas soluções alternativas para fazer isso funcionar, por exemplo, através da dedução de argumento do modelo.

Mas todas essas soluções alternativas que conheço são apenas para argumentos de tipo. Então, a questão é

Existem soluções alternativas para fazer isso funcionar com argumentos de modelo que não são do tipo?

struct S{
    template<int x>
    S() { ... }
}

Estou interessado em soluções que devem funcionar em C ++ moderno (padrão C ++ 17, incluindo todos os TS), pois essa é uma questão teórica e não prática.

questionAnswers(1)

yourAnswerToTheQuestion