这是后续的问题:
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也不是有效的表达式.