diff --git a/include/internal/catch_capture.hpp b/include/internal/catch_capture.hpp index 8499a551..87f78f4e 100644 --- a/include/internal/catch_capture.hpp +++ b/include/internal/catch_capture.hpp @@ -16,7 +16,6 @@ #include "catch_tostring.h" #include "catch_interfaces_runner.h" #include "catch_compiler_capabilities.h" -#include "catch_type_traits.hpp" #if defined(CATCH_CONFIG_FAST_COMPILE) @@ -128,7 +127,7 @@ static_cast(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ - catch( Catch::add_const::type>::type ) { \ + catch( exceptionType ) { \ __catchResult.captureResult( Catch::ResultWas::Ok ); \ } \ catch( ... ) { \ diff --git a/projects/SelfTest/CompilationTests.cpp b/projects/SelfTest/CompilationTests.cpp index 635c62c8..4aa969f3 100644 --- a/projects/SelfTest/CompilationTests.cpp +++ b/projects/SelfTest/CompilationTests.cpp @@ -23,20 +23,31 @@ TEST_CASE("#809") { REQUIRE(42 == f); } -// ------------------------------------------------------------------ -// REQUIRE_THROWS_AS was changed to catch exceptions by const& -// using type traits. This means that this should compile cleanly -// Provides indirection to prevent unreachable-code warnings +// ------------------------------------------------------------------ +// Changes to REQUIRE_THROWS_AS made it stop working in a template in +// an unfixable way (as long as C++03 compatibility is being kept). +// To prevent these from happening in the future, this needs to compile + void throws_int(bool b) { if (b) { throw 1; } } -TEST_CASE("#542") { - CHECK_THROWS_AS(throws_int(true), int); - CHECK_THROWS_AS(throws_int(true), int&); - CHECK_THROWS_AS(throws_int(true), const int); +template +bool templated_tests(T t) { + int a = 3; + REQUIRE(a == t); + CHECK(a == t); + REQUIRE_THROWS(throws_int(true)); CHECK_THROWS_AS(throws_int(true), const int&); + REQUIRE_NOTHROW(throws_int(false)); + REQUIRE_THAT("aaa", Catch::EndsWith("aaa")); + return true; } + +TEST_CASE("#833") { + REQUIRE(templated_tests(3)); +} +