是否false
允许隐式转换为指针在clang++和g++之间是不同的:
g++-4.8:无论是否带有 -std=c++11 总是警告
clang++ (trunk):如果没有 -std=c++11 则警告,如果有 -std=c++11 则错误
所以任何人都知道为什么 g++ 和 clang++ 的行为不同,谁是正确的?C++ 标准(C++03 和 C++11)中的哪些段落讨论了这种情况。
谢谢。
[hidden ~]$ cat b.cpp
const char* f() { return false; }
[hidden ~]$ g++ -c b.cpp
b.cpp: In function ‘const char* f()’:
b.cpp:1:26: warning: converting ‘false’ to pointer type ‘const char*’ [-Wconversion-null]
const char* f() { return false; }
^
[hidden ~]$ g++ -std=c++11 -c b.cpp
b.cpp: In function ‘const char* f()’:
b.cpp:1:26: warning: converting ‘false’ to pointer type ‘const char*’ [-Wconversion-null]
const char* f() { return false; }
^
[hidden ~]$ clang++ -c b.cpp
b.cpp:1:26: warning: initialization of pointer of type 'const char *' to null from a constant boolean expression [-Wbool-conversion]
const char* f() { return false; }
^~~~~
1 warning generated.
[hidden ~]$ clang++ -std=c++11 -c b.cpp
b.cpp:1:26: error: cannot initialize return object of type 'const char *' with an rvalue of type 'bool'
const char* f() { return false; }
^~~~~
1 error generated.