Имеется шаблонная функция, принимающая один аргумент по ссылке на константу.
И два ее специализированных варианта для const char* и char*.
template<class T>
void test(const T& t)
{
}
template<>
void test(char const* const& t)
{
}
template<>
void test(char* const& t)
{
}
Собственно проверка
int main()
{
const char* test1 = "test";
char* test2 = "test";
test(test1); // N1
test(test2); // N2
test("test");// N3
}
При вызове test под номером один, как и следовало ожидать, вызывается специализированная под const char* функция.
При вызове test под номером два — специализированная под char* функция.
Догадайтесь, какую из трех функция вызывает test N3?
Ответ: Общую шаблонную функцию.
Не могу понять почему. На сколько я знаю в C++ строковый литералы имеют тип const char*.
Или я ошибаюсь?
Да, забыл сказать — компилятор VS7.1.