在 GCC 15 中,std::noop_coroutine
的定义是
{ return std::noop_coroutine_handle(); }
std::noop_coroutine_handle
定义为:
using noop_coroutine_handle = std::coroutine_handle<std::noop_coroutine_promise>;
为了获得无操作协程,我们编写
std::noop_coroutine()
我猜这相当于
std::noop_coroutine_handle{}
和
std::coroutine_handle<std::noop_coroutine_promise>{}
因此我相信标准库只需要提供std::noop_coroutine_promise
(以及使用它作为模板参数的某些专业化)。
为什么标准引入了三个新符号?(感觉有点武断 - 只是我的个人观点。)
因为可以。在标准中定义特定名称,而不是将其保留为实现定义,实际上只会影响用于描述它的格式。
标准仍然必须描述承诺类型的行为。
实施者必须使用某个名称来定义的承诺类型
noop_coroutine
,并且句柄类型可以用普通手写出来,但很可能有一个别名。