采取以下代码:
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)似乎也根本没有实现此规则。这就是为什么它不会给您警告。