ev-stdexec-template-lambda-awaitable-003¶
| 字段 | 值 |
|---|---|
| 项目 | NVIDIA/stdexec |
| 固定 commit | 6d7ad689f4d4 |
| 路径 | include/stdexec/__detail/__awaitable.hpp |
| 行段 | L45-L51 |
| 特性 | 模板 lambda(template lambda) |
| 许可证 | Apache-2.0 |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-26 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
在重载集合里用带 concept 约束的模板 lambda 做候选选择
为什么典型¶
两个模板 lambda 共享一个重载集合:第一个只在 promise 支持 await_transform 时可行,第二个作为回退。
摘录¶
inline constexpr auto __get_awaitable = __first_callable{
[]<class _Promise, __has_await_transform<_Promise> _Awaitable>(_Awaitable &&__awaitable,
_Promise &__promise)
-> decltype(auto)
{ return __promise.await_transform(static_cast<_Awaitable &&>(__awaitable)); },
[]<class _Awaitable>(_Awaitable &&__awaitable, __ignore = {}) noexcept -> decltype(auto)
{ return static_cast<_Awaitable &&>(__awaitable); }};
备注¶
生产路径;约束写在 lambda 的模板参数列表中,用于 __first_callable 的重载决议。