diff --git a/src/catch2/catch_matchers_templates.hpp b/src/catch2/catch_matchers_templates.hpp index b8f6e852..1a8bedbd 100644 --- a/src/catch2/catch_matchers_templates.hpp +++ b/src/catch2/catch_matchers_templates.hpp @@ -170,6 +170,11 @@ namespace Matchers { return "not " + m_matcher.toString(); } + //! Negating negation can just unwrap and return underlying matcher + friend MatcherT const& operator ! (Detail::MatchNotOfGeneric const& matcher) { + return matcher.m_matcher; + } + private: MatcherT const& m_matcher; }; } // namespace Detail @@ -190,6 +195,7 @@ namespace Matchers { return { lhs, rhs }; } + //! Wrap provided generic matcher in generic negator template typename std::enable_if::value, Detail::MatchNotOfGeneric>::type operator ! (MatcherT const& matcher) { @@ -260,12 +266,6 @@ namespace Matchers { return Detail::MatchAnyOfGeneric{Detail::array_cat(static_cast(std::addressof(lhs)), std::move(rhs.m_matchers))}; } - template - MatcherT const& operator ! (Detail::MatchNotOfGeneric const& matcher) { - return matcher.m_matcher; - } - - } // namespace Matchers } // namespace Catch