Неуловимое настраиваемое исключение C ++

Это сводило меня с ума всю ночь.

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). Я пока не приму ответа. Спасибо за помощь.

6
задан Ben Crowhurst 10 September 2015 в 06:58
поделиться