template<class T> T sqrt (T);
template<class T> complex<T> sqrt(complex<T>);
double sqrt(double);
void f(complex<double> z)
{
sqrt(z);
}
Как в этом коде sqrt<double>(complex<double>) оказывается кандидатом на вывод аргумента шаблона? И автор говорит, что любой вызов, который соответствует sqrt<T>(complex<T>), также соответствует sqrt<T>(<T>). Как?
Код взят из Языка программирования C++ Бьярна Страуструпа. Раздел 13.3.2
foo(something_concrete)соответствует вызовуfoo(anything), что для меня имеет смысл. Разумеется, из двух компилятор выберет более специализированный. - person SingerOfTheFall   schedule 18.10.2012