Здравствуйте, B0FEE664, Вы писали:
BFE>Суть в том, что вызов f(p); не вызывает функцию template<> void f<>(char* p); даже если используются исключительно шаблонные функции.
Я вам еще этюд "в тему" подброшу, так, чтоб у сипипи-фобов припадок случился. Вот вам два примера:
http://coliru.stacked-crooked.com/a/f4573e39736257ab
| 1 |
| #include <iostream>
template <typename T>
void foo(T) { std::cout << 0 << std::endl; }
template <typename T>
void foo(T*) { std::cout << 1 << std::endl; }
template <>
void foo<char*>(char*) { std::cout << 2 << std::endl; }
int main()
{
char* p{};
foo(p); // -> 1
}
|
| |
http://coliru.stacked-crooked.com/a/d22d3b584cb6a6aa
| 2 |
| #include <iostream>
template <typename T>
void foo(T) { std::cout << 0 << std::endl; }
template <typename T>
void foo(T*) { std::cout << 1 << std::endl; }
template <>
void foo<char>(char*) { std::cout << 2 << std::endl; }
int main()
{
char* p{};
foo(p); // -> 2
}
|
| |
Первый выводит "1", а второй выводит "2". Задача: найдите ОДНО отличие.