std::basic_ios 显式转换为 bool

Explicit conversion of std::basic_ios to bool

我读到,从 C++11 开始,从 std::basic_iosbool 的转换必须是显式的。 clang 允许仅在类型转换后将 getline 的结果分配给 bool。我不明白的是为什么它接受以下代码:

while( getline(inputfile, newline) )

?

但是,有一个例外。如果对于某些表达式 e,声明 bool t(e) 格式正确并且在以下上下文之一中,将调用隐式转换。

  • 控制if、while、for的表达式
  • 逻辑运算符 !、&& 和 ||
  • 条件运算符 ?:
  • static_assert
  • 没有例外

std::basic_ios 的情况下,它有一个明确的 bool operator,因此有资格在 while 语句中进行转换。

查看 Implicit conversions 了解更多详情。