Собственно не понимаю вот чего:
Пусть есть:
template<class T> T sqrt(T);
template<class T> Complex<T> sqrt (Complex<T>)
void f(Comlaex<double> x)
{ sqrt(z); }
При разрешении перегрузки (согласно Страуструпу) используются следующие специализации:
sqrt<double>(Complex<double>)
sqrt<Complex<double>>(Complex<double>)
Теперь вопрос:
Откуда вторая я могу понять, а откуда первая???? И по каким таким правилам она взялась? (это моя главная непонятка к 13 главе соответсвующего труда, помогите понять плиз)