这是后续的问题:
What does the
void() in decltype(void()) mean exactly?.
decltype(void())在上面提到的问题(实际上在答案)中解释了这种情况下的void()意味着什么呢?
另一方面,我注意到decltype(void {})不能编译.
它们之间有什么区别(至少在decltype的上下文中)?
为什么第二个表达式不编译?
为了完整起见,它遵循一个最小的(not-)工作示例:
int main() {
// this doesn't compile
//decltype(void{}) *ptr = nullptr;
// this compiles fine
decltype(void()) *ptr = nullptr;
(void)ptr;
}
解决方法
当与sizeof一起使用时,void()被解释为type-id.
当与decltype一起使用时,void()被解释为一个表达式.
当与decltype一起使用时,void()被解释为一个表达式.
我不认为void {}在任何上下文中都是有效的.它既不是有效的type-id也不是有效的表达式.