Hide std::exception_ptr and friends if exceptions disabled

Some compilers, e.g. the Green Hills C++ compiler, react badly to the
appearance of std::exception_ptr, std::current_exception,
std::rethrow_exception and std::uncaught_exception(s). To allow usage of
Catch2 with these compilers when exceptions are disabled, hide the usage
of std::exception_ptr etc. when compiling with
CATCH_CONFIG_DISABLE_EXCEPTIONS.
This commit is contained in:
Matthias Blankertz 2020-06-04 11:53:13 +02:00 committed by Martin Hořeňovský
parent 0f12995501
commit 0614a4acb3
4 changed files with 11 additions and 1 deletions

View File

@ -59,7 +59,11 @@ namespace Catch {
m_tagAliasRegistry.add( alias, tag, lineInfo ); m_tagAliasRegistry.add( alias, tag, lineInfo );
} }
void registerStartupException() noexcept override { void registerStartupException() noexcept override {
#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
m_exceptionRegistry.add(std::current_exception()); m_exceptionRegistry.add(std::current_exception());
#else
CATCH_INTERNAL_ERROR("Attempted to register active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
#endif
} }
IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override { IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override {
return m_enumValuesRegistry; return m_enumValuesRegistry;

View File

@ -9,6 +9,7 @@
#include "catch_startup_exception_registry.h" #include "catch_startup_exception_registry.h"
#include "catch_compiler_capabilities.h" #include "catch_compiler_capabilities.h"
#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
namespace Catch { namespace Catch {
void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept { void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept {
CATCH_TRY { CATCH_TRY {
@ -24,3 +25,4 @@ void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexce
} }
} // end namespace Catch } // end namespace Catch
#endif

View File

@ -15,11 +15,13 @@
namespace Catch { namespace Catch {
class StartupExceptionRegistry { class StartupExceptionRegistry {
#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
public: public:
void add(std::exception_ptr const& exception) noexcept; void add(std::exception_ptr const& exception) noexcept;
std::vector<std::exception_ptr> const& getExceptions() const noexcept; std::vector<std::exception_ptr> const& getExceptions() const noexcept;
private: private:
std::vector<std::exception_ptr> m_exceptions; std::vector<std::exception_ptr> m_exceptions;
#endif
}; };
} // end namespace Catch } // end namespace Catch

View File

@ -12,7 +12,9 @@
namespace Catch { namespace Catch {
bool uncaught_exceptions() { bool uncaught_exceptions() {
#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) #if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
return false;
#elif defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
return std::uncaught_exceptions() > 0; return std::uncaught_exceptions() > 0;
#else #else
return std::uncaught_exception(); return std::uncaught_exception();