Far*_*nor 42 c++ language-lawyer
考虑以下行:
std::string s = (std::stringstream() << "foo").str();
Run Code Online (Sandbox Code Playgroud)
这不应该编译,因为std::stringstream::operator<<()它被继承std::ostream并返回一个没有成员的std::ostream&对象。str()
看来主要的编译器现在接受了这些代码,而他们过去并不接受。发生了什么标准变化来使这个编译?
我用GCC、Clang和MSVC做了一些测试,我可以找到发生更改的版本:
| 编译器 | 拒绝直到(版本) | 接受来自(版本) |
|---|---|---|
| 海湾合作委员会 | 11.1 | 11.2 |
| 铛 | 12.0.1 | 13.0.0 |
| MSVC | v19.14 | v19.15 |
您可以在这里找到测试