Это сводило меня с ума всю ночь.
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, я не смогу его поймать.
Среда Mac OS X с использованием GCC с поддержкой C ++ 0x.
РЕДАКТИРОВАТЬ: На данный момент решением является продолжение разработки в системе на основе Linux (Fedora). Я пока не приму ответа. Спасибо за помощь.