Ниже приведены строки из "языка программирования c ++"
template<class T > T sqrt(T );
template<class T > complex<T> sqrt(complex<T>);
double sqrt(double);
void f(complex<double> z )
{
s q r t (2 ); // sqrt<int>(int)
sqrt(2.0) ; // sqrt(double)
sqrt(z) ; // sqrt<double>(complex<double>)
}
Я не понимаю, почему sqrt (z); звонит sqrt<double>(complex<double>)
может любой тел, пожалуйста объясните.
Автор говорит,
T sqrt<complex<T>>
более специализирован, чем T sqrt <T>
, но есть отдельное объявление для template<class T > complex<T> sqrt(complex<T>);
, почему бы не использовать это?