Eventuali duplicati:
Can objects with private copy constructors be thrown?VS compilatore potrebbe accedere copia privata ctor
Per quanto ne so, quando si Trow oggetto come valore, deve essere creato copia. Quindi il costruttore di copia dovrebbe essere chiamato se esiste. Se copy ctor esiste ed è privato, ciò dovrebbe causare errori di compilazione. Ecco il codice di esempio
class Exception {
public:
Exception() {
cout << "Exception()" << endl;
}
~Exception() {
cout << "~Exception() " << endl;
}
private:
Exception(const Exception &c) {
cout << "Exception(c)" << endl;
}
};
E la prossima codice dovrebbe portare ad errore di compilazione.
try {
Exception local;
throw local;
} catch (...) {
}
Ma sia in VS 2005 e VS 2008 con successo compilare il codice e chiamare ctor privato. Ho sbagliato che questo comportamento non è standard ed è un errore nel compilatore?
Ho parlato troppo presto. http://ideone.com/hXrJd –
@Azione: VS era il peggiore compilatore C++ conforme agli standard tra i più importanti (gcc, icc, comeau, ecc.). I suoi sostenitori dicono che è molto meglio ora, personalmente ho smesso di usarlo. –