A>template<typename T>
A>template<> CL<T> CL<T>::operator = <OtherT> (const CL<SrcT> &Src)
— запрещена такая последовательность.
#include <iostream>
template<typename Type>
class CL
{
public:
CL& operator=(const CL&)
{
std::cout<<"default assign operator"<<std::endl;
return *this;
}
template<typename T> CL& operator=(const CL<T>&)
{
std::cout<<"template<typename T> CL& operator=(const CL<T>&)"<<std::endl;
return *this;
}
template<> CL& operator=<std::string>(const CL<std::string>&)
{
std::cout<<"template<> CL& operator=<std::string>(const CL<std::string>&)"<<std::endl;
return *this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CL<int> _val1;
CL<int> _val2;
CL<std::string> _val3; // здесь компилер выдаст варнинг ...
CL<double> _val4;
_val1=_val2;
_val1=_val3;
_val1=_val4;
return 0;
}