У меня есть следующий код:
template<typename T>
bool validate(const T& minimum, const T& maximum, const T& testValue)
{
return testValue >= minimum && testValue <= maximum;
}
template<>
bool validate<const char&>(const char& minimum, const char& maximum, const char& testValue)
{
// Allows comparisons with char arguments, ignoring case
// Localize by calling previously defined function
return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}
Первый шаблон используется для любых вводимых типов, а специализация — для литеральных символов. Код компилируется и запускается с main.cpp для его проверки, но после тестирования я обнаружил, что специализация не вызывается. Он вызывает основной шаблон. Я не могу понять, почему.
<const char&>
случая, но для<char>
лучше всего вообще не специализироваться и предоставить перегрузку функции без шаблона - person Piotr Skotnicki   schedule 14.08.2015T=char
то параметры останутсяconst char&
- person Piotr Skotnicki   schedule 14.08.2015