diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index 36625209e..f2e47efa4 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -4734,6 +4734,13 @@ namespace internal { template class ExceptionMatcherImpl { + class NeverThrown { + public: + const char* what() const noexcept { + return "this exception should never be thrown"; + } + }; + public: ExceptionMatcherImpl(Matcher matcher) : matcher_(std::move(matcher)) {} @@ -4764,7 +4771,14 @@ class ExceptionMatcherImpl { } else { return true; } - } catch (const std::exception& err) { + } catch ( + typename std::conditional< + std::is_same< + typename std::remove_cv< + typename std::remove_reference::type>::type, + std::exception>::value, + const NeverThrown&, + const std::exception&>::type const& err) { #if GTEST_HAS_RTTI *listener << "throws an exception of type " << GetTypeName(typeid(err)) << " ";