Skip to content

Commit 708187d

Browse files
fix(exec): any_sender completion signatures for sequence with 3+ senders
When exec::sequence has 3+ senders, it recursively computes completion signatures by peeling off the first sender and querying the tail as a sub-sequence (__seq::__sndr). This tail holds child senders by const&. The get_completion_signatures discovery machinery passes the sender type un-decayed (as const any_sender&), but any_sender's constraint std::derived_from<Self, _interface_> fails because reference types are never derived_from anything. Fix by decaying Self before the derived_from check in _isender::_interface_::get_completion_signatures(). Fixes #2101
1 parent e92245d commit 708187d

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

include/exec/any_sender_of.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,8 @@ namespace experimental::execution
514514
using sender_concept = STDEXEC::sender_tag;
515515
using _base_t::_base_t;
516516

517-
template <__std::derived_from<_interface_> Self, class... Env>
517+
template <class Self, class... Env>
518+
requires std::derived_from<std::remove_cvref_t<Self>, _interface_>
518519
static consteval auto get_completion_signatures()
519520
{
520521
// throw if Env does not contain the queries needed to type-erase the receiver:

0 commit comments

Comments
 (0)