これは私を一晩中夢中にさせてきました。
class ExceptionImpl;
/**
* Custom Exception.
*/
class Exception : public virtual std::exception
{
public:
Exception( const Exception& original );
Exception( const std::string& message );
virtual ~Exception( void ) throw( );
virtual const char* what( void ) const throw( );
private:
const std::unique_ptr< ExceptionImpl > m_pimpl;
};
このカスタム例外をライブラリから次のようにスローします
throw Exception( "Error message" );
そしてメインビアでそれをキャッチします
try
{
regex pattern(R"(a*)");
Id::set_pattern_validator(pattern);
assert(false);
}
catch( Exception const& exception )
{
assert(true);
}
Id::set_pattern_validator
ライブラリのIdクラス内の静的メソッドであり、例外のソースです。例外をキャッチするためにできる限りのことを試みましたが、キャッチできません。
catch( Exception )
catch( std::exception )
catch( ... )
Nada!
端末出力は次のとおりです。
「'Exception'what()のインスタンスをスローした後に呼び出された終了:パターンバリデーターは一度設定すると変更できません。トラップを中止してください。」
ヤギを犠牲にすることを除いて、私は次に何を試すべきか途方に暮れています...ヒント/ヒント???
注:main内でカスタム例外をスローした場合、問題なくキャッチできます。
C++0xをサポートするGCCを使用するMacOSX環境。
編集:今のところ解決策は、Linuxベースのシステム(Fedora)で開発を続けることです。現時点では回答を受け付けていません。みんな助けてくれてありがとう。