Сообщение 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:
Правда первый создает коллизию с двумя другими, но это не важно в данном случае. Главное, что все три выигрывают у специализации. Еще раз подчеркну, при любом объявлении основного шаблона (совместимым с приведенной специализацией, разумеется).
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:
Правда первый создает коллизию с двумя другими, но это не важно в данном случае. Главное, что все три выигрывают у специализации. Еще раз подчеркну, при любом объявлении основного шаблона (совместимом с приведенной специализацией, разумеется).
BFE>Зададимся вопросом: существует ли такой код, для которого этот вызов не будет вызовом функции template<> void f<>(char* p);?
BFE>Я, таки, напишу это: не всё так однозначно!
Как раз в данном случае все однозначно, ответ: существует. Вот три варианта, которые выиграют overload resolution — при любом объявлении primary template:
void f(char*);
void f(char* &);
void f(char* const &);
Правда первый создает коллизию с двумя другими, но это не важно в данном случае. Главное, что все три выигрывают у специализации. Еще раз подчеркну, при любом объявлении основного шаблона (совместимом с приведенной специализацией, разумеется).