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 |
您可以在这里找到测试