From fb4e70d1467845610c3b9f6ab9cc51b9eedab4bb Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Tue, 25 Feb 2020 11:16:16 +1100 Subject: [PATCH] concepts: add initial invocable concept --- concepts.hpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/concepts.hpp b/concepts.hpp index f1380e1c..03baca26 100644 --- a/concepts.hpp +++ b/concepts.hpp @@ -11,6 +11,7 @@ #include #include #include +#include /////////////////////////////////////////////////////////////////////////////// @@ -134,6 +135,25 @@ namespace cruft::concepts { { b == a } -> boolean; { b != a } -> boolean; }; + + + template + concept invocable = + requires (FunctionT &&function, ArgsT &&...args) + { + std::invoke ( + std::forward (function), + std::forward (args)... + ); + }; + + template + concept regular_invocable = invocable; + + template + concept predicate = + regular_invocable && + boolean>; }