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

未关闭
#2,407 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
cmake, cpp

调研方向

The check lives in connect_t::operator() and the debug receiver __debug::__receiver. The any_sender failure is in test/exec/test_any_sender.cpp, at the __nothrow_move_constructible assert in __fwd in __env.hpp. The CMake SYSTEM include setting is the other part. First the maintainers must decide whether the flag should keep working. If it should, done means the mismatched-completion case warns through connect, the any_sender test compiles with the flag on, and a build-failure test exists.

由索引模型根据 Issue 内容生成。

描述

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 (6d568715~1) warning warning warning
#1809 and main (e780d360) 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 ca3797c3, 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 #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.

主要语言
C++
星标
2.5k
派生
284
平均合并
2 天 32 分钟
30 天内合并 PR
88

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NVIDIA/stdexec 的其他 Issue

查看 NVIDIA/stdexec 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。