私は非常に単純なC++クラス「A」を持っています。その空のコンストラクターはmainで呼び出されます。唯一の空のc'torは、例外SomeExceptionをスローします。
#include <iostream>
using namespace std;
class SomeException : public exception { };
class A {
public:
A() {
throw SomeException();
}
};
int main() {
try {
//A a();
A a;
cout << "No exception." << endl;
}
catch (SomeException& se) {
cout << "Caught se." << endl;
}
}
以下のような括弧なしでAのコンストラクターを呼び出すと、意図した例外が正しくスローされます。
A a;
この場合の出力は次のとおりです。
$ ./a.exe
Caught se.
しかし、以下の構文でc'torを呼び出すと、例外はスローされず、何も起こらなかったかのように次の行に進みます。
A a();
この場合の出力は...
$ ./a.exe
No exception.
上記のプログラムをUbuntu11.10とminGWを使用するWindowsで試しましたが、どちらも同じ結果になりました。minGWにはGCCバージョン4.5.2を使用し、Ubuntuには4.6.1を使用しています。
この奇妙な行動についての手がかりはありますか?これはgccのバグですか、それとも私のやり方が間違っていますか?