【发布时间】:2017-01-14 05:02:19
【问题描述】:
这是this问题的后续跟进。
在 cmets 和答案中,不止一次提到 void{} 既不是有效的类型 ID,也不是有效的表达式。
这很好,很有意义,仅此而已。
然后我通过了工作草案的[7.1.7.4.1/2](占位符类型推演)。
据说:
[...]
- 对于在使用包含占位符类型的返回类型声明的函数中出现的未丢弃的return语句,T是声明的返回类型,e是return语句的操作数。如果return语句没有操作数,则e是void{};
[...]
那么,void{}(在概念上)是否合法?
如果工作草案中提到它是可以接受的(即使只是作为一个 - 就好像它是一个 - 声明),它必须确实是合法的。这意味着decltype(void{}) 也应该是有效的,例如。
否则,工作草案是否应该使用void() 而不是void{}?
好吧,老实说,我很确定我不够熟练,无法指出工作草案中的错误,所以真正的问题是:我的推理出了什么问题?
上面的项目符号中提到的void{} 到底是什么?为什么在这种情况下它是合法的表达方式?
【问题讨论】:
-
我会(微弱地)怀疑工作草案错误...这就是为什么它是工作草案而不是标准? :)
-
@Yakk:当然,提交问题仍然是个好主意。
-
嗯,今天知道你可以
return void(); -
@AndyG
void()可以用在你想象不到的地方... :-) -
@skypjack:按照您的问题跟踪,现在看来您将成为专家 :-)
标签: c++ language-lawyer void c++17 return-type-deduction