std::string 用布尔值初始化

std::string initialization with a bool

考虑以下初始化:

std::string falseString = false;
std::string trueString = true;

对于 g++ 5.2.0,编译器对 falseString 抛出警告,而对 trueString.

抛出错误

对于 clang++ 3.6 -std=c++11,编译器会为 falseStringtrueString 抛出错误。

Q1) 为什么 gcc 的行为不同,即使两个初始化值的类型相同 (bool)?

Q2) 哪个编译器是正确的,为什么?标准怎么说?

编辑:

error: no viable conversion from 'bool' to 'std::string' (aka 'basic_string')

warning: converting 'false' to pointer type for argument 1 of 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' [-Wconversion-null]

首先,您绝对不能从 true 初始化 std::string。这简直是​​无稽之谈。

GCC 5.2 正在接受来自 false 的初始化,但表示抗议,因为它曾经是一个有效的空指针文字。是的。比较 C++03 和 C++11 之间的 3.9.1/6 — "as described below, bool values behave as integral types" 已删除。

这几天在两个编译器上都应该出错,但是 直到大约一个月前(所以 GCC 6.0)。