采取以下代码:

int main()
{
    decltype(main()) x = 0;
    return x;
}

gcc提示:
main.cpp: In function 'int main()':
main.cpp:8:19: warning: ISO C++ forbids taking address of function '::main' [-Wpedantic]
     decltype(main()) x = 0;
                   ^
main.cpp:8:19: warning: ISO C++ forbids taking address of function '::main' [-Wpedantic]

但不c。那么decltype(main())会引发此错误吗? decltype如何获取main的地址?

最佳答案

在这种情况下,GCC的诊断可能无法正确表达,因为decltype不需要知道main的地址;它只需要知道它的类型。但是,警告是基于以下标准(第3.6.1/3节)中的内容:



我想GCC将此解释为意味着您甚至不能在未经评估的表达式中使用它。

即使我打开了我能想到的所有标志,即使main递归调用了它,Clang(无论如何版本3.4)似乎也根本没有实现此规则。这就是为什么它不会给您警告。

10-08 09:25
查看更多