Сегодня я попытался сделать что-то, что с удивлением осознал, что это не сработало. У меня есть шаблон, который принимает тип и значение в качестве параметров. Я хочу специализироваться на параметре типа, но оставить параметр значения открытым. Вот так
template <class T = void, bool Enabled = false>
struct seFoo {};
template <bool Enabled>
struct seFoo<int, Enabled> {};
// Doesn't work :(
seFoo<false> foo;
Однако это приводит к ошибке компиляции для слишком небольшого числа аргументов шаблона. Похоже, что экземпляр должен соответствовать сигнатуре неспециализированного шаблона, прежде чем компилятор даже взглянет на частичную специализацию.
Есть ли способ заставить это работать?
Если такой подход принципиально невозможен, меня интересуют альтернативные подходы.
Видимо, я не единственный, кого это удивляет. Эта статья допускает ту же ошибку в конце.