C++ std::使用bool初始化字符串

C++ std::使用bool初始化字符串,c++,c++11,g++,stdstring,clang++,C++,C++11,G++,Stdstring,Clang++,考虑以下初始化: std::string falseString = false; std::string trueString = true; 使用g++5.2.0,编译器会对falseString抛出警告,而对trueString抛出错误 使用clang++3.6-std=c++11,编译器会对false字符串和trueString抛出错误 Q1)为什么即使两个初始化值的类型相同(bool),gcc的行为也会不同 Q2)哪个编译器是正确的,为什么?标准怎么说 编辑: 错误:从'bool'到

考虑以下初始化:

std::string falseString = false;
std::string trueString = true;
使用
g++5.2.0
,编译器会对
falseString
抛出警告,而对
trueString
抛出错误

使用
clang++3.6-std=c++11
,编译器会对
false字符串和
trueString
抛出错误

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

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

编辑:

错误:从'bool'到'std::string'(aka)没有可行的转换 “基本字符串”)

警告:正在将的参数1的“false”转换为指针类型 'std::uuuCXX11::basic_string::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-“如下所述,布尔值表现为整数类型”已被删除


最近两个编译器上都会出现错误,但直到一个月前(所以GCC 6.0)。

告诉我们警告/错误是什么可能是一个线索。。。?你是故意省略它们的吗?主要是历史性的-所以这是一个错误!