Templates and generic programming
T.144
Не специализируйте шаблоны функций
Причина
Вы не можете частично специализировать шаблон функции согласно правилам языка. Вы можете полностью специализировать шаблон функции, но почти наверняка вместо этого следует использовать перегрузку — потому что специализации шаблонов функций не участвуют в разрешении перегрузки и ведут себя не так, как вы, вероятно, ожидаете. В редких случаях вы должны действительно специализировать, делегируя шаблону класса, который можно специализировать корректно.
Пример
???
Исключения: если у вас есть веская причина специализировать шаблон функции, просто напишите единственный шаблон функции, делегирующий шаблону класса, а затем специализируйте шаблон класса (включая возможность написания частичных специализаций).
Контроль
- Отмечайте все специализации шаблона функции. Используйте перегрузку.