【发布时间】:2014-08-28 03:00:26
【问题描述】:
采取以下测试用例:
#include <iostream>
void foo()
{}
int main()
{
std::cout << &foo << std::endl;
}
GCC 4.1.2、GCC 4.8 和 GCC 4.9(C++03 和 C++11)在编译和编译时都是 give the following output:
$ 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
这可能是因为函数指针唯一可行的流插入是转换为bool(并且需要转换为void* 才能真正将地址放入流中)。
但是,Microsoft Visual Studio 2012 和 2013 改为输出指针地址。
哪组工具链符合要求?不符合项是否记录在任何地方?
【问题讨论】:
-
@πάνταῥεῖ:stackoverflow.com/questions/25538776/…
-
@LightnessRacesinOrbit 你已经回答了这个问题,不是吗?唯一可行的转换是
bool(4.12),而 VS 错误地转换为void*,这应该需要强制转换。 -
没有从函数指针到
void *的隐式转换。 -
@Praetorian:我没有在标准和/或文档中找到证明 VS 有扩展的证据。这就是我所追求的。证明! :)
标签: c++ visual-studio gcc language-lawyer