You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何std::noop_coroutine()未被定义为constexpr?

关于std::noop_coroutine()是否应为constexpr的疑问

当前std::noop_coroutine()的签名不含constexpr,其实现如下:

inline std::noop_coroutine_handle noop_coroutine() noexcept {
    return noop_coroutine_handle();
}

(参考GCC libstdc++源码)

这导致无法定义constexpr的std::noop_coroutine_handle实例:

constexpr std::noop_coroutine_handle noop = std::noop_coroutine();  // 编译错误

我清楚C++标准并未要求该函数是constexpr,但这是有意的设计,还是标准的疏漏?

实际上,std::noop_coroutine_handle拥有私有的constexpr默认构造函数;同时std::coroutine_handle<void>和std::coroutine_handle<Promise>都具备constexpr构造函数与from_address方法(仅from_promise非constexpr)。

既然能为void及所有Promise类型定义constexpr的coroutine_handle,却无法对noop_coroutine_handle这么做,这显然不合情理。

我在本地测试发现,只需给noop_coroutine()添加一个constexpr关键字即可让代码正常运行:

inline constexpr std::noop_coroutine_handle noop_coroutine() noexcept {
    return noop_coroutine_handle();
}

// 现在用户可以正常定义constexpr的noop_coroutine_handle
constexpr std::noop_coroutine_handle noop = std::noop_coroutine();

内容的提问来源于stack exchange,提问作者DoZerg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:46:17