Информация об изменениях

Сообщение Re[4]: Для чего шаблонной функции нужна особая сигнатура? от 27.01.2023 21:33

Изменено 28.01.2023 10:07 rg45

Re[4]: Для чего шаблонной функции нужна особая сигнатура?
Здравствуйте, B0FEE664, Вы писали:

BFE>Суть в том, что вызов f(p); не вызывает функцию template<> void f<>(char* p); даже если используются исключительно шаблонные функции.


Я вам еще этюд "в тему" подброшу, так, чтоб у сипипи-фобов припадок случился. Вот вам два примера:

http://coliru.stacked-crooked.com/a/f4573e39736257ab
http://coliru.stacked-crooked.com/a/d22d3b584cb6a6aa

Первый выводит "1", а второй выводит "2". Задача: найдите ОДНО отличие.
Re[4]: Для чего шаблонной функции нужна особая сигнатура?
Здравствуйте, 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". Задача: найдите ОДНО отличие.