Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-05-12 10:04:14 +0200
committerMartin Hořeňovský2026-05-12 11:05:31 +0200
commitd838f88b9c9a05d2879d29a5a54f864f823a1d64 (patch)
tree46c42efbdbe1908e306d4b6666fb67c445eed093 /src
parentc267b6eb4de6d9ccdde238334c1248c7b60b8c0b (diff)
downloadcatch3-d838f88b9c9a05d2879d29a5a54f864f823a1d64.tar.gz
Constexpr matching support in generic Contains matchers
Diffstat (limited to 'src')
-rw-r--r--src/catch2/matchers/catch_matchers_contains.hpp14
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) };
}