Это было мотивировано этой статьей (стр. 5)
template<class T>
T const &f(T const &a, T const &b){
return (a > b ? a : b);
}
template int const &f<int>(int const &, int const &);
int main(){
int x = 0, y = 0;
short s = 0;
f(x, y); // OK
f(x, s); // Is this call well-formed?
}
Хорошо ли сформирован звонок 'f(x, s)'
? Я предположил, что, поскольку шаблон функции 'f'
явно создан, будут применены стандартные преобразования и, следовательно, 'short s'
будет преобразован в 'int'
, чтобы соответствовать вызову явной специализации 'f<int>'
. Но похоже, что это плохо сформировано?
В какой части стандарта говорится о применимых правилах в этом контексте?