Проблема в вашем примере не в специализации, это нормально.Проблема в том, что FieldTypeById<1>
не может вывести тип FirstField
.Вы можете изменить это, просто добавив значение по умолчанию к основному шаблону:
template <auto id, typename FirstField = void, typename... OtherFields>
struct FieldTypeById {
using Type = int;
};
Теперь все аргументы даны явно, взяты из значений по умолчанию или выведены (как пустой пакет).После того, как все аргументы известны, можно использовать специализацию для этих аргументов.
Посмотреть вживую