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

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

Изменено 26.01.2023 21:23 rg45

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

BFE>Зададимся вопросом: существует ли такой код, для которого этот вызов не будет вызовом функции template<> void f<>(char* p);?

BFE>Я, таки, напишу это: не всё так однозначно!

Как раз в данном случае все однозначно, ответ: существует. Вот три варианта, которые выиграют overload resolution — при любом объявлении primary template:

void f(char*);
void f(char* &);
void f(char* const &);


Правда первый создает коллизию с двумя другими, но это не важно в данном случае. Главное, что все три выигрывают у специализации. Еще раз подчеркну, при любом объявлении основного шаблона (совместимым с приведенной специализацией, разумеется).
Re[2]: Для чего шаблонной функции нужна особая сигнатура?
Здравствуйте, B0FEE664, Вы писали:

BFE>Зададимся вопросом: существует ли такой код, для которого этот вызов не будет вызовом функции template<> void f<>(char* p);?

BFE>Я, таки, напишу это: не всё так однозначно!

Как раз в данном случае все однозначно, ответ: существует. Вот три варианта, которые выиграют overload resolution — при любом объявлении primary template:

void f(char*);
void f(char* &);
void f(char* const &);


Правда первый создает коллизию с двумя другими, но это не важно в данном случае. Главное, что все три выигрывают у специализации. Еще раз подчеркну, при любом объявлении основного шаблона (совместимом с приведенной специализацией, разумеется).