mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	Don't sanitize exception type in REQUIRE_THROWS_AS
Effectively a revert of previous commit, fixing #542, where this was added to stop linters complaining about `REQUIRE_THROWS_AS` used like `REQUIRE_THROWS_AS(expr, std::exception);`, which would be slicing the caught exception. Now it is user's responsibility to pass us proper exception type. Closes #833 which wanted to add `typename`, so that the construct works in a template, but that would not work with MSVC and older GCC's, as having `typename` outside of a template is allowed only from C++11 onward.
This commit is contained in:
		| @@ -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<void>(expr); \ | ||||
|                 __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ | ||||
|             } \ | ||||
|             catch( Catch::add_const<Catch::add_lvalue_reference<exceptionType>::type>::type ) { \ | ||||
|             catch( exceptionType ) { \ | ||||
|                 __catchResult.captureResult( Catch::ResultWas::Ok ); \ | ||||
|             } \ | ||||
|             catch( ... ) { \ | ||||
|   | ||||
| @@ -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 <typename T> | ||||
| 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<int>(3)); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský