c++ - 协程的返回类型不拥有成员类型:C++20 标准中的 promise_type 是否是未定义的行为?
问题描述
在 C++ Technical Specification N4680中,8.4.4.3 写道:
对于作为非静态成员函数的协程 f,令 P1 表示隐式对象参数(13.3.1)的类型,P2 ... Pn 为函数参数的类型;否则令 P1 ... Pn 为函数参数的类型。令 p1 ... pn 是表示这些对象的左值。令 R 为返回类型,F 为 f 的函数体,T 为 std::experimental::coroutine_traits 类型,P 为由 T::promise_type 表示的类类型。然后,协程的行为就好像它的主体是:
这一段似乎每个协程都应该有一个promise类型。但在 18.11.1.1 中,它说:
1 标头定义了主模板 coroutine_traits,如果 ArgTypes 是类型的参数包,并且如果 R 是具有有效 (14.8.2) 成员类型 promise_type 的类型,则 coroutine_traits 具有以下可公开访问的成员:
using promise_type = typename R::promise_type;
否则, coroutine_traits 没有成员。
似乎coroutine_traits<R,ArgTypes...>
不拥有 a是合法的promise_type
。
所以让我感到困惑的是,a corouinte 的返回类型不拥有 a 是否是未定义的行为promise_type
。
另一个相关问题:还有其他地方可以询问有关 C++ 标准的问题吗?我觉得在 Stackoverflow 上问这些问题有点奇怪。
解决方案
推荐阅读
- ios - ListenerService Firebase 不适用于日期
- python - Spyder:启动内核时发生错误
- java - 是否可以在一个文件夹中嵌套两个 Maven 原型模块?
- magento2 - 可销售数量 = 0 的产品不属于产品集合(Magento 2.4)
- vb.net - 自动加载图像时未处理的异常
- redux - 我是 Redux 的新手,谁能帮我解决这个问题
- python - 如何使用 python pptx 从 powerpoint 中提取特定文本?
- python-3.x - python3:计算相同总价和净价之间的折扣给我一个不是0的值
- python - 子解析器的位置参数引发错误:无效选择
- python-3.x - Python 3 Pycharm ide 警告