Функция stringstream str() повторно настраивает неверный ptr

Я пытаюсь прочитать файл XML и буферизовать его в std::stringstream, но когда я вызываю функцию str() для буферизованных данных, я получаю неверный ptr..

Код...

std::stringstream pushFileToStream(const char* xmlFile)
{
    std::stringstream buffer;

    std::ifstream file(xmlFile);
    if ( file )
    {
        buffer << file.rdbuf();
        file.close();
    }
    return buffer;
}

int main()
{
    const char* xmlFile = "resources/sample.xml";
    std::stringstream inputLicenseFile = pushFileToStream(xmlFile);

    std::string strXml = inputLicenseFile.str();  <--- bad ptr..
    return 0;
}

person dipak singh    schedule 25.11.2014    source источник
comment
Ваш код не должен компилироваться... потоки не могут быть скопированы: см., например. здесь. Итак, как вы получаете ошибку времени выполнения? .str() возвращает std::string, а не указатель, так к чему все эти разговоры о плохом указателе? Если это действительно компилируется для вас, какой компилятор и версию вы используете? Это должно было быть доисторическим. В любом случае, просто пусть pushFileToStream принимает поток для работы по ссылке, а не пытается вернуть поток по значению... в любом случае это более гибко.   -  person Tony Delroy    schedule 25.11.2014
comment
@TonyD: Их можно перемещать. И то, как он это использует, должно использовать конструктор перемещения.   -  person Benjamin Lindley    schedule 25.11.2014
comment
@TonyD второй после того, что сказал Бенджамин. clang 3.5 не имеет проблем с созданием правильной конструкции перемещения для этого.   -  person WhozCraig    schedule 25.11.2014
comment
@BenjaminLindley: хороший момент для C++11... кажется, отсутствует в GCC на ideone - даже с явным return std::move(buffer); он не учитывает конструктор перемещения....   -  person Tony Delroy    schedule 25.11.2014
comment
Если вы пытаетесь прочитать файл, вы делаете это без ненужного копирования: stackoverflow.com/a/10336701/412080   -  person Maxim Egorushkin    schedule 25.11.2014
comment
@TonyD: я подозреваю, что это потому, что в их библиотеке отсутствовал механизм перемещения для stringstream. Это не исправить с помощью move.   -  person MSalters    schedule 25.11.2014