以下は、「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>);
ますか?