Оператор присвоения копии, сгенерированный компилятором, выбирается по разрешению перегрузки:
class A{
public:
A& operator=(A const& other){
std::cout << "copy assignment\n";
return *this;
}
template<class T>
void operator=(T const& other){
std::cout << "templated assignment\n";
}
};
Будет печатать «назначение копирования» и по существу будет равен тому, что сгенерирует для вас компилятор (без печати, конечно).