Duplicar posible:
Can objects with private copy constructors be thrown?VS compilador podría tener acceso a la copia privada ctor
Como sé, cuando TROW objeto como valor, la copia debe ser creado. Por lo tanto, se debe llamar al constructor de copia si existe. Si copy ctor existe y es privado, esto debería causar un error de compilación. Aquí está el código de muestra
class Exception {
public:
Exception() {
cout << "Exception()" << endl;
}
~Exception() {
cout << "~Exception() " << endl;
}
private:
Exception(const Exception &c) {
cout << "Exception(c)" << endl;
}
};
Y el siguiente código debería llevar a un error de compilación.
try {
Exception local;
throw local;
} catch (...) {
}
Pero tanto en VS 2005 como en VS 2008 compilaron exitosamente ese código y llamaron al ctor privado. ¿Me equivoco al decir que este es un comportamiento no estándar y es un error en el compilador?
Hablé demasiado pronto. http://ideone.com/hXrJd –
@Ation: VS solía ser el peor compilador de C++ compatible con el estándar entre los principales (gcc, icc, comeau, etc.). Sus seguidores dicen que es mucho mejor ahora, personalmente dejé de usarlo. –