Специализация шаблонной функции
От: ss_greh  
Дата: 28.05.04 04:34
Оценка:
Имеется шаблонная функция, принимающая один аргумент по ссылке на константу.
И два ее специализированных варианта для 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.