c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输

标签 c++ c++11 stream getline rvalue-reference

我在尝试将 getline() 与临时流对象一起使用时遇到了意外的编译错误:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string input = "hello\nworld\nof\ndelimiters";

    string line;
    if (getline(stringstream(input), line)) // ERROR!
    {
        cout << line << endl;
    }
}

看起来不存在接受对流对象的右值引用的 getline() 重载。如果我将 main() 更改为使用左值,它会按预期编译和运行:

int main()
{
    string input = "hello\nworld\nof\ndelimiters";

    string line;
    stringstream ss(inpupt);
    if (getline(ss, line)) // OK
    {
        cout << line << endl;
    }
}

所以我查看了 C++11 标准并发现 (§ 21.4.8.9) getline() 的重载采用对流对象的右值引用 应该存在。

我是否遗漏了一些明显的东西,或者这是一个错误? GCC 4.7.2 和 Clang 3.2 都会出现该错误。我目前无法在 VC 上测试它。

最佳答案

如果我在 OS X 上使用以下行进行编译,则编译成功。您使用的是什么版本的 libstdc++ 或 libc++?

clang++ -std=c++11 -stdlib=libc++ foo.cc

libstdc++(以及与此相关的 libc++)尚未完全实现 C++ 2011 标准库。这似乎是 libstdc++ 中缺少的功能之一。

遗憾的是,我不知道有任何资源可以准确列出每个实现中缺少的内容。

关于c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265883/

相关文章:

c++ - unixODBC C++ 文档...?

c++ - 创建结构类型的变量时预期出现 ';' 错误

c++ - 使用引用生成 IBM Rhapsody 访问器

c++ - 有没有一种安全的方法可以在 std::future 上调用 wait()?

java - 可中断套接字读取Java

android - 为什么我们需要使用 android 工具链(或 NDK)来编译在 android 应用程序上下文中运行的 c/c++ 代码?

c++ - 如何编写自定义断言?

c++ - 使用 new 分配连续空间还是使用 vector ?

python - python解析流中的音频

c# - 如何在不缓冲的情况下流式传输来自 WCF 的响应?