| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | /* *  Created by Martin Hořeňovský on 03/04/2017. * * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */#ifndef TWOBLUECUBES_CATCH_MATCHERS_GENERIC_HPP_INCLUDED#define TWOBLUECUBES_CATCH_MATCHERS_GENERIC_HPP_INCLUDED#include "catch_common.h"#include "catch_matchers.h"#include <functional>#include <string>namespace Catch {namespace Matchers {namespace Generic {namespace Detail {    std::string finalizeDescription(const std::string& desc);}template <typename T>class PredicateMatcher : public MatcherBase<T> {    std::function<bool(T const&)> m_predicate;    std::string m_description;public:    PredicateMatcher(std::function<bool(T const&)> const& elem, std::string const& descr)        :m_predicate(std::move(elem)),        m_description(Detail::finalizeDescription(descr))    {}    bool match( T const& item ) const override {        return m_predicate(item);    }    std::string describe() const override {        return m_description;    }};} // namespace Generic    // The following functions create the actual matcher objects.    // The user has to explicitly specify type to the function, because    // inferring std::function<bool(T const&)> is hard (but possible) and    // requires a lot of TMP.    template<typename T>    Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)> const& predicate, std::string const& description = "") {        return Generic::PredicateMatcher<T>(predicate, description);    }} // namespace Matchers} // namespace Catch#endif // TWOBLUECUBES_CATCH_MATCHERS_GENERIC_HPP_INCLUDED
 |