Вместо удаления специализаций иногда удобнее удалить саму функцию шаблона, но для одной из ее специализаций.
Пример:
template<typename T>
bool IsLucky(T) = delete;
bool IsLucky<int>(int n) {
return !(n%7);
}
// I guess bool IsLucky(int n) will not help my cause
С помощью вывод аргумента шаблона , здесь я могу гарантировать, что без использования угловых скобок не произойдет неявного преобразования.
char c='F';
IsLucky(c); // Will not compile
Есть ли недостатки этого подхода?