diff options
| author | Martin Hořeňovský | 2026-05-12 10:04:14 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-05-12 11:05:31 +0200 |
| commit | d838f88b9c9a05d2879d29a5a54f864f823a1d64 (patch) | |
| tree | 46c42efbdbe1908e306d4b6666fb67c445eed093 /src | |
| parent | c267b6eb4de6d9ccdde238334c1248c7b60b8c0b (diff) | |
| download | catch3-d838f88b9c9a05d2879d29a5a54f864f823a1d64.tar.gz | |
Constexpr matching support in generic Contains matchers
Diffstat (limited to 'src')
| -rw-r--r-- | src/catch2/matchers/catch_matchers_contains.hpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/catch2/matchers/catch_matchers_contains.hpp b/src/catch2/matchers/catch_matchers_contains.hpp index 90cfe641..85168030 100644 --- a/src/catch2/matchers/catch_matchers_contains.hpp +++ b/src/catch2/matchers/catch_matchers_contains.hpp @@ -23,7 +23,7 @@ namespace Catch { Equality m_eq; public: template <typename T2, typename Equality2> - ContainsElementMatcher(T2&& target, Equality2&& predicate): + constexpr ContainsElementMatcher(T2&& target, Equality2&& predicate): m_desired(CATCH_FORWARD(target)), m_eq(CATCH_FORWARD(predicate)) {} @@ -33,7 +33,7 @@ namespace Catch { } template <typename RangeLike> - bool match( RangeLike&& rng ) const { + constexpr bool match( RangeLike&& rng ) const { for ( auto&& elem : rng ) { if ( m_eq( elem, m_desired ) ) { return true; } } @@ -49,12 +49,12 @@ namespace Catch { // Note that we do a copy+move to avoid having to SFINAE this // constructor (and also avoid some perfect forwarding failure // cases) - ContainsMatcherMatcher(Matcher matcher): + constexpr ContainsMatcherMatcher(Matcher matcher): m_matcher(CATCH_MOVE(matcher)) {} template <typename RangeLike> - bool match(RangeLike&& rng) const { + constexpr bool match(RangeLike&& rng) const { for (auto&& elem : rng) { if (m_matcher.match(elem)) { return true; @@ -74,14 +74,14 @@ namespace Catch { * Uses `std::equal_to` to do the comparison */ template <typename T> - std::enable_if_t<!Detail::is_matcher_v<T>, + constexpr std::enable_if_t<!Detail::is_matcher_v<T>, ContainsElementMatcher<T, std::equal_to<>>> Contains(T&& elem) { return { CATCH_FORWARD(elem), std::equal_to<>{} }; } //! Creates a matcher that checks whether a range contains element matching a matcher template <typename Matcher> - std::enable_if_t<Detail::is_matcher_v<Matcher>, + constexpr std::enable_if_t<Detail::is_matcher_v<Matcher>, ContainsMatcherMatcher<Matcher>> Contains(Matcher&& matcher) { return { CATCH_FORWARD(matcher) }; } @@ -92,7 +92,7 @@ namespace Catch { * Uses `eq` to do the comparisons, the element is provided on the rhs */ template <typename T, typename Equality> - ContainsElementMatcher<T, Equality> Contains(T&& elem, Equality&& eq) { + constexpr ContainsElementMatcher<T, Equality> Contains(T&& elem, Equality&& eq) { return { CATCH_FORWARD(elem), CATCH_FORWARD(eq) }; } |