Skip to content

fix(exec): any_sender completion signatures for sequence with 3+ senders - #2223

Open
alwaysprince05 wants to merge 3 commits into
NVIDIA:mainfrom
alwaysprince05:fix/any-sender-sequence-completion-signatures
Open

fix(exec): any_sender completion signatures for sequence with 3+ senders#2223
alwaysprince05 wants to merge 3 commits into
NVIDIA:mainfrom
alwaysprince05:fix/any-sender-sequence-completion-signatures

Conversation

@alwaysprince05

Copy link
Copy Markdown

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

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 NVIDIA#2101
@copy-pr-bot

copy-pr-bot Bot commented Aug 22, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@ericniebler

Copy link
Copy Markdown
Collaborator

a const& any_sender cannot be connect-ed. that is why its get_completion_signatures is constrained the way it is. i don't know what the right fix is, but this is not it.

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). The nested sender types were passed by
reference to get_completion_signatures, causing failures with
any_sender whose get_completion_signatures requires a non-reference type.

Fix by decaying sender types before passing to get_completion_signatures
in __sndr::get_completion_signatures().

Fixes NVIDIA#2101
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

exec::any_sender fails get_completion_signatures inside a sequence of 3+ senders (works with 2)

2 participants