Re[4]: Для чего шаблонной функции нужна особая сигнатура?
От: rg45 СССР  
Дата: 27.01.23 21:33
Оценка: 2 (1) +1
Здравствуйте, 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". Задача: найдите ОДНО отличие.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 28.01.2023 10:07 rg45 . Предыдущая версия . Еще …
Отредактировано 28.01.2023 9:36 rg45 . Предыдущая версия .
Отредактировано 27.01.2023 21:34 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.