Template operador de asignación sobrecargando misterio
Tengo una estructura simpleWrapper
, distinguido por dos sobrecargas del operador de asignación con plantilla:
template<typename T>
struct Wrapper {
Wrapper() {}
template <typename U>
Wrapper &operator=(const Wrapper<U> &rhs) {
cout << "1" << endl;
return *this;
}
template <typename U>
Wrapper &operator=(Wrapper<U> &rhs) {
cout << "2" << endl;
return *this;
}
};
Luego declaro a y b:
Wrapper<float> a, b;
a = b;
asignaciónb
aa
utilizará la sobrecarga del operador de asignación con plantilla no constante desde arriba, y se muestra el número "2".
o que me desconcierta es esto: si declaroc
yd
,
Wrapper<float> c;
const Wrapper<float> d;
c = d;
y asignard
ac
, ninguna de las dos sobrecargas del operador de asignación se utiliza y no se muestra ninguna salida; entonces se invoca el operador de asignación de copia predeterminado. ¿Por qué asignard
ac
no utiliza el operador de asignación sobrecargado const proporcionado? O, en cambio, ¿por qué asignarb
aa
n usa el operador de asignación de copia predeterminado?