Skip to content

STDEXEC_ENABLE_EXTRA_TYPE_CHECKING no longer checks senders in connect (since #1809) #2407

Open

Description

@veljjanoski

With STDEXEC_ENABLE_EXTRA_TYPE_CHECKING, connect used to instantiate completion_signatures_of_t for the sender it connects, so __debug_sender warned when a sender completes with something it did not declare. That came from #1070 (for #1065). The new connect from #1809 no longer does this, so now only code that names completion_signatures_of_t gets the check.

Example: a sender that declares set_value_t(int) but completes with set_value(std::move(rcvr), v), where v is an int lvalue. Compiled with -I<stdexec>/include -DSTDEXEC_ENABLE_EXTRA_TYPE_CHECKING, with GCC 12 and Clang 21:

sync_wait(sndr) let_value(sndr, f) completion_signatures_of_t<Sndr>
before #1809 (6d56871~1) warning warning warning
#1809 and main (e780d36) no warning no warning warning

I tried to put the check back into connect_t::operator(), and found two more things:

  • With the flag on, that breaks test/exec/test_any_sender.cpp with GCC 12 and Clang 21. when_any inside an any_sender then gets connected to __debug::__receiver, and static_assert(__nothrow_move_constructible<_Env>) in __fwd (__env.hpp) fails for the type-erased receiver environment. Main compiles that file with the flag on.
  • Since ca3797c, the CMake target adds the include directory as SYSTEM. GCC and Clang don't report warnings from system headers, so with -isystem instead of -I none of the cases above warn, also before a new implementation for connect that improves diagnostics on failure #1809. So CMake users don't see these warnings at all.

Is the flag still meant to work? If yes, I'd be happy to make a PR that restores the check in connect, makes it work with any_sender, and adds a build-failure test. For the SYSTEM part, one option is to not mark the include directory SYSTEM when STDEXEC_ENABLE_EXTRA_TYPE_CHECKING is ON. If you'd rather drop the flag, that's fine too.

Claude (Anthropic) was used as assistant.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions