使用bool初始化std :: string

Cin*_*out 3 c++ g++ stdstring c++11 clang++

考虑以下初始化:

std::string falseString = false;
std::string trueString = true;
Run Code Online (Sandbox Code Playgroud)

有了g++ 5.2.0,编译器抛出警告falseString,而错误trueString.

随着clang++ 3.6 -std=c++11,编译器会引发错误都falseString还有trueString.

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

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

编辑:

错误:没有可行的从'bool'转换为'std :: string'(又名'basic_string')

警告:将'false'转换为'std :: __ cxx11 :: basic_string <_CharT,_Traits,_Alloc> :: basic_string(const _CharT*,const _Alloc&)的参数1的指针类型[与_CharT = char; _Traits = std :: char_traits; _Alloc = std :: allocator]'[ - Wconversion-null]

Lig*_*ica 6

对于初学者来说,你绝对不能初始化一个std::stringtrue.这只是荒谬的.

GCC 5.2接受来自false抗议的初始化,因为它曾经是一个有效的空指针文字.是啊.比较C++ 03和C++ 11之间的3.9.1/6 - "如下所述,bool值表现为整数类型"被删除.

这些天它在两个编译器上都应该出错,但是GCC在这方面一直都是错误的,直到一个月前(所以GCC 6.0).