Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
c0a3b23
Start work on an io_sender<Return(Args...)>
ispeters Apr 17, 2026
3e8a7b9
Rename io_sender to function
ispeters Apr 17, 2026
0e833fb
Generalize implementation
ispeters Apr 18, 2026
575880f
Support no-throw functions
ispeters Apr 18, 2026
6ee3e53
Get rid of virtual inheritance
ispeters Apr 19, 2026
6a4856d
Support arbitrary completion signatures
ispeters Apr 19, 2026
491f8e6
Round out the partial specializations of exec::function
ispeters Apr 19, 2026
7c001d0
Delete a layer of forwarding
ispeters Apr 19, 2026
517fc67
Inch towards allocator support
ispeters Apr 19, 2026
10dddfe
Add frame allocator support
ispeters Apr 19, 2026
2da9ddd
constexpr (almost) all the things
ispeters Apr 20, 2026
a0cf358
More tests
ispeters Apr 20, 2026
c1022e7
Get allocator selection working
ispeters Apr 20, 2026
2f41320
Environment forwarding works(ish)
ispeters Apr 21, 2026
cd8a6b4
Tidy up and add comments
ispeters Apr 21, 2026
86ea1b7
Remove [[no_unique_address]]
ispeters Apr 28, 2026
54cb4eb
Clean up the _func_impl constructor
ispeters Apr 28, 2026
7b07e79
Replace most of exec::function with _any_receiver_ref
ispeters Apr 29, 2026
7d451a7
Clean up the comments
ispeters Apr 29, 2026
39b457f
Stop deducing noexcept
ispeters Apr 29, 2026
dc82c73
Simplify with __any<_iopstate>
ispeters Apr 29, 2026
b1a341a
Use _any_opstate_base and _state in _func_op
ispeters Apr 29, 2026
54d5e9a
Simplify _sigs_from_t
ispeters Apr 29, 2026
986c29b
CR feedback and lvalue connectability
ispeters Apr 29, 2026
7690558
Tidy up test cases
ispeters Apr 30, 2026
f3255b4
Do not deduce factories as references
ispeters Apr 30, 2026
7dc7d52
Fix build
ispeters Apr 30, 2026
3ea9d18
Add signature validation to exec::queries
ispeters Apr 30, 2026
6418bea
Clean up includes
ispeters Apr 30, 2026
8cd2ee6
Accept non-empty callables
ispeters Apr 30, 2026
25de5f1
Fix up _func_impl::get_completion_signatures
ispeters Apr 30, 2026
53f3710
Ensure completion_signature order is irrelevant
ispeters Apr 30, 2026
1f5ea62
Tweak comments
ispeters Apr 30, 2026
5339a85
Fix GCC builds
ispeters May 1, 2026
8ce030c
Hopefully fix MSVC
ispeters May 1, 2026
4db2566
Make query specification order-independent
ispeters May 1, 2026
3b22b17
Maybe fix MSVC + CUDA builds
ispeters May 3, 2026
e2b7b47
Implement choose_frame_allocator with __first_callable
ispeters May 4, 2026
fbd215e
Use STDEXEC::__invoke
ispeters May 4, 2026
415e8ef
Remove && in file comment
ispeters May 4, 2026
cf3682e
Make the basic_common_reference specializations symmetric
ispeters May 4, 2026
45d18f0
Make function's implementation more concise
ispeters May 4, 2026
dc55b1b
Remove operator==
ispeters May 4, 2026
d7df333
Remove _canonical_fn<queries<>> specialization
ispeters May 4, 2026
0986575
Make function::base private
ispeters May 4, 2026
97c753a
Merge branch 'main' into frame_allocator
ericniebler May 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion include/exec/any_sender_of.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#pragma once

#include "../stdexec/__detail/__any.hpp"
#include "../stdexec/__detail/__concepts.hpp"
#include "../stdexec/__detail/__receiver_ref.hpp"
#include "../stdexec/__detail/__receivers.hpp"

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

namespace experimental::execution
{
namespace _qry_detail
{
template <class Sig, bool Nothrow>
struct _env_archetype;

template <class Return, class Query, class... Args, bool Nothrow>
struct _env_archetype<Return(Query, Args...), Nothrow>
{
Return query(Query, Args &&...) const noexcept(Nothrow);
};

using namespace STDEXEC;

template <class Sig>
inline constexpr bool is_query_function_v = false;

template <class Return, class Query, class... Args>
inline constexpr bool is_query_function_v<Return(Query, Args...)> =
__callable<Query, _env_archetype<Return(Query, Args...), false> const &, Args...>;

template <class Return, class Query, class... Args>
inline constexpr bool is_query_function_v<Return(Query, Args...) noexcept> =
__nothrow_callable<Query, _env_archetype<Return(Query, Args...), true> const &, Args...>;
} // namespace _qry_detail

template <class... Sigs>
struct queries;
requires(_qry_detail::is_query_function_v<Sigs> && ...)
struct queries
{};

template <class Sigs, class Queries = queries<>>
struct any_receiver;
Expand Down
Loading
Loading