mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-22 21:36:11 +01:00
Redirect std::uncaught_exception to Catch::uncaught_exception
This means that only one place needs to work with warnings from the deprecation of `std::uncaught_exception()` in C++17. Closes #1162.
This commit is contained in:
parent
5e484862f2
commit
5201e92564
@ -187,6 +187,7 @@ set(INTERNAL_HEADERS
|
|||||||
${HEADER_DIR}/internal/catch_timer.h
|
${HEADER_DIR}/internal/catch_timer.h
|
||||||
${HEADER_DIR}/internal/catch_tostring.h
|
${HEADER_DIR}/internal/catch_tostring.h
|
||||||
${HEADER_DIR}/internal/catch_totals.h
|
${HEADER_DIR}/internal/catch_totals.h
|
||||||
|
${HEADER_DIR}/internal/catch_uncaught_exceptions.h
|
||||||
${HEADER_DIR}/internal/catch_user_interfaces.h
|
${HEADER_DIR}/internal/catch_user_interfaces.h
|
||||||
${HEADER_DIR}/internal/catch_version.h
|
${HEADER_DIR}/internal/catch_version.h
|
||||||
${HEADER_DIR}/internal/catch_wildcard_pattern.h
|
${HEADER_DIR}/internal/catch_wildcard_pattern.h
|
||||||
@ -247,6 +248,7 @@ set(IMPL_SOURCES
|
|||||||
${HEADER_DIR}/internal/catch_timer.cpp
|
${HEADER_DIR}/internal/catch_timer.cpp
|
||||||
${HEADER_DIR}/internal/catch_tostring.cpp
|
${HEADER_DIR}/internal/catch_tostring.cpp
|
||||||
${HEADER_DIR}/internal/catch_totals.cpp
|
${HEADER_DIR}/internal/catch_totals.cpp
|
||||||
|
${HEADER_DIR}/internal/catch_uncaught_exceptions.cpp
|
||||||
${HEADER_DIR}/internal/catch_version.cpp
|
${HEADER_DIR}/internal/catch_version.cpp
|
||||||
${HEADER_DIR}/internal/catch_wildcard_pattern.cpp
|
${HEADER_DIR}/internal/catch_wildcard_pattern.cpp
|
||||||
${HEADER_DIR}/internal/catch_xmlwriter.cpp
|
${HEADER_DIR}/internal/catch_xmlwriter.cpp
|
||||||
|
@ -31,6 +31,14 @@
|
|||||||
# define CATCH_CPP14_OR_GREATER
|
# define CATCH_CPP14_OR_GREATER
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# if __cplusplus >= 201703L
|
||||||
|
# define CATCH_CPP17_OR_GREATER
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CATCH_CPP17_OR_GREATER)
|
||||||
|
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
@ -80,6 +88,11 @@
|
|||||||
// Visual C++
|
// Visual C++
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
|
||||||
|
# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
|
||||||
|
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
// Universal Windows platform does not support SEH
|
// Universal Windows platform does not support SEH
|
||||||
// Or console colours (or console at all...)
|
// Or console colours (or console at all...)
|
||||||
# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
|
# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
|
||||||
@ -112,6 +125,11 @@
|
|||||||
# define CATCH_CONFIG_POSIX_SIGNALS
|
# define CATCH_CONFIG_POSIX_SIGNALS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_INTERNAL_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
|
||||||
|
# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
|
#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
|
||||||
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
|
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
|
||||||
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS
|
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "catch_message.h"
|
#include "catch_message.h"
|
||||||
#include "catch_interfaces_capture.h"
|
#include "catch_interfaces_capture.h"
|
||||||
|
#include "catch_uncaught_exceptions.h"
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
@ -49,18 +50,9 @@ namespace Catch {
|
|||||||
getResultCapture().pushScopedMessage( m_info );
|
getResultCapture().pushScopedMessage( m_info );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning(push)
|
|
||||||
#pragma warning(disable:4996) // std::uncaught_exception is deprecated in C++17
|
|
||||||
#endif
|
|
||||||
ScopedMessage::~ScopedMessage() {
|
ScopedMessage::~ScopedMessage() {
|
||||||
if ( !std::uncaught_exception() ){
|
if ( !uncaught_exceptions() ){
|
||||||
getResultCapture().popScopedMessage(m_info);
|
getResultCapture().popScopedMessage(m_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "catch_section.h"
|
#include "catch_section.h"
|
||||||
#include "catch_capture.hpp"
|
#include "catch_capture.hpp"
|
||||||
|
#include "catch_uncaught_exceptions.h"
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
@ -18,22 +19,15 @@ namespace Catch {
|
|||||||
m_timer.start();
|
m_timer.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning(push)
|
|
||||||
#pragma warning(disable:4996) // std::uncaught_exception is deprecated in C++17
|
|
||||||
#endif
|
|
||||||
Section::~Section() {
|
Section::~Section() {
|
||||||
if( m_sectionIncluded ) {
|
if( m_sectionIncluded ) {
|
||||||
SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() );
|
SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() );
|
||||||
if( std::uncaught_exception() )
|
if( uncaught_exceptions() )
|
||||||
getResultCapture().sectionEndedEarly( endInfo );
|
getResultCapture().sectionEndedEarly( endInfo );
|
||||||
else
|
else
|
||||||
getResultCapture().sectionEnded( endInfo );
|
getResultCapture().sectionEnded( endInfo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This indicates whether the section should be executed or not
|
// This indicates whether the section should be executed or not
|
||||||
Section::operator bool() const {
|
Section::operator bool() const {
|
||||||
|
22
include/internal/catch_uncaught_exceptions.cpp
Normal file
22
include/internal/catch_uncaught_exceptions.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Created by Josh on 1/2/2018.
|
||||||
|
* Copyright 2018 Two Blue Cubes Ltd. All rights reserved.
|
||||||
|
*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "catch_compiler_capabilities.h"
|
||||||
|
#include "catch_uncaught_exceptions.h"
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
namespace Catch {
|
||||||
|
bool uncaught_exceptions() {
|
||||||
|
// https://github.com/catchorg/Catch2/issues/1162
|
||||||
|
#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
|
||||||
|
return std::uncaught_exceptions() > 0;
|
||||||
|
#else
|
||||||
|
return std::uncaught_exception();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} // end namespace Catch
|
15
include/internal/catch_uncaught_exceptions.h
Normal file
15
include/internal/catch_uncaught_exceptions.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Created by Josh on 1/2/2018.
|
||||||
|
* Copyright 2018 Two Blue Cubes Ltd. All rights reserved.
|
||||||
|
*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef TWOBLUECUBES_CATCH_UNCAUGHT_EXCEPTIONS_H_INCLUDED
|
||||||
|
#define TWOBLUECUBES_CATCH_UNCAUGHT_EXCEPTIONS_H_INCLUDED
|
||||||
|
|
||||||
|
namespace Catch {
|
||||||
|
bool uncaught_exceptions();
|
||||||
|
} // end namespace Catch
|
||||||
|
|
||||||
|
#endif // TWOBLUECUBES_CATCH_UNCAUGHT_EXCEPTIONS_H_INCLUDED
|
Loading…
Reference in New Issue
Block a user