14#ifndef RANGES_V3_FUNCTIONAL_CONCEPTS_HPP
15#define RANGES_V3_FUNCTIONAL_CONCEPTS_HPP
21#include <range/v3/detail/prologue.hpp>
30#if defined(_MSC_VER) && !defined(__clang__)
33 template<
typename Fun,
typename... Args>
34 CPP_concept invocable =
35 std::is_invocable_v<Fun, Args...>;
39 template<
typename Fun,
typename... Args>
40 CPP_requires(invocable_,
43 invoke((Fun &&) fn, std::declval<Args>()...)
47 template<
typename Fun,
typename... Args>
48 CPP_concept invocable =
54 template<
typename Fun,
typename... Args>
55 CPP_concept regular_invocable =
56 invocable<Fun, Args...>;
61 template<
typename Fun,
typename... Args>
62 CPP_requires(predicate_,
67 decltype(
invoke((Fun &&) fn, std::declval<Args>()...)),
72 template<
typename Fun,
typename... Args>
73 CPP_concept predicate =
74 regular_invocable<Fun, Args...> &&
79 template<
typename R,
typename T,
typename U>
80 CPP_concept relation =
88 template<
typename R,
typename T,
typename U>
89 CPP_concept strict_weak_order =
104#include <range/v3/detail/epilogue.hpp>
The regular_invocable concept.
The strict_weak_order concept.
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition meta.hpp:541