decltype(void())和decltype(void {})之间的差异

sky*_*ack 11 c++ void decltype language-lawyer c++11

这是问题的一个后续:什么是void()decltype(void())意味着什么?.


decltype(void())编译好,void()在这种情况下的手段在上述问题中解释(实际上在答案中).
另一方面,我注意到decltype(void{})没有编译.

它们之间有什么区别(decltype至少在上下文中)?
为什么第二个表达式不能编译?


为了完整起见,它遵循一个最小的(不是)工作示例:

int main() {
    // this doesn't compile
    //decltype(void{}) *ptr = nullptr;
    // this compiles fine
    decltype(void()) *ptr = nullptr;
    (void)ptr;
}
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

void()与...一起被解释为type-id sizeof.
void()被用作时被解释为表达式decltype.

我不认为void{}在任何情况下都有效.它既不是有效的type-id也不是有效的表达式.