Skip to content

Commit bfa9b49

Browse files
authored
Merge pull request #2040 from ispeters/frame_allocator
Introduce exec::function<...>
2 parents 8186c5d + 362fe47 commit bfa9b49

8 files changed

Lines changed: 1068 additions & 1 deletion

File tree

include/exec/any_sender_of.hpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#pragma once
1717

1818
#include "../stdexec/__detail/__any.hpp"
19+
#include "../stdexec/__detail/__concepts.hpp"
1920
#include "../stdexec/__detail/__receiver_ref.hpp"
2021
#include "../stdexec/__detail/__receivers.hpp"
2122

@@ -28,8 +29,35 @@ STDEXEC_PRAGMA_IGNORE_GNU("-Woverloaded-virtual")
2829

2930
namespace experimental::execution
3031
{
32+
namespace _qry_detail
33+
{
34+
template <class Sig, bool Nothrow>
35+
struct _env_archetype;
36+
37+
template <class Return, class Query, class... Args, bool Nothrow>
38+
struct _env_archetype<Return(Query, Args...), Nothrow>
39+
{
40+
Return query(Query, Args &&...) const noexcept(Nothrow);
41+
};
42+
43+
using namespace STDEXEC;
44+
45+
template <class Sig>
46+
inline constexpr bool is_query_function_v = false;
47+
48+
template <class Return, class Query, class... Args>
49+
inline constexpr bool is_query_function_v<Return(Query, Args...)> =
50+
__callable<Query, _env_archetype<Return(Query, Args...), false> const &, Args...>;
51+
52+
template <class Return, class Query, class... Args>
53+
inline constexpr bool is_query_function_v<Return(Query, Args...) noexcept> =
54+
__nothrow_callable<Query, _env_archetype<Return(Query, Args...), true> const &, Args...>;
55+
} // namespace _qry_detail
56+
3157
template <class... Sigs>
32-
struct queries;
58+
requires(_qry_detail::is_query_function_v<Sigs> && ...)
59+
struct queries
60+
{};
3361

3462
template <class Sigs, class Queries = queries<>>
3563
struct any_receiver;

0 commit comments

Comments
 (0)