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

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

Изменено 26.01.2023 21:21 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 &);


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