跳转至

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 的重载决议。

查看固定 commit 源码 · 返回证据索引