Estoy pasando un objeto temporal sin nombre a una función definida con el parámetro const ref. El copiador de la clase es privado y obtengo un error de compilación. No entiendo por qué se llama a un constructor de copia en esta situación.¿por qué se llama al constructor de copia cuando pasa temporalmente por referencia de referencia?
class A {
public:
A(int i) {}
private:
A(const A&) {}
};
void f(const A& a)
{
}
int main()
{
f(A(1)); // <-- error here: 'A::A(const A&)' is private
}
Como era de esperar, cuando cambio la principal a:
A a(1);
f(a);
funciona.
EDIT: el compilador gcc 4.1.2 es
¿Qué compilador estás usando? – sharptooth
VC++ 9 se complace en compilar la primera variante. – sharptooth
@sharptooth: gcc, actualizaré – davka