使用以下测试用例:
#include <iostream>
void foo()
{}
int main()
{
std::cout << &foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
GCC 4.1.2,GCC 4.8和GCC 4.9(C++ 03和C++ 11)在构建和编译时都给出以下输出:
$ g++ main.cpp -o test && ./test
main.cpp: In function 'int main()':
main.cpp:8:23: warning: the address of 'void foo()' will always evaluate as 'true' [-Waddress]
std::cout << &foo << std::endl;
^
1
Run Code Online (Sandbox Code Playgroud)
这应该是因为函数指针唯一可行的流插入是转换为bool(并且void*需要强制转换才能实际获取流中的地址).
但是,Microsoft Visual Studio 2012和2013会输出指针地址.
哪一套工具链符合要求?是否记录了不合格?