Mover ou trocar um fluxo de string

Eu quero mover uma sequência de strings, no aplicativo do mundo real, tenho algum membro de dados da classe sequência de strings, que desejo reutilizar para diferentes strings durante a operação.

stringstream não possui uma atribuição de cópia ou construtor de cópias, o que faz sentido. No entanto, de acordo com cppreference.com e cplusplus.com std :: stringstream deve ter uma operação de atribuição e troca de movimento definida. Eu tentei os dois, e ambos falham.

Mover atribuição
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream

int main () {

  std::stringstream stream("1234");

  //stream = std::move(std::stringstream("5678"));

  stream.operator=(std::move(std::stringstream("5678")));

  //stream.operator=(std::stringstream("5678"));

  return 0;
}

fonte:http://ideone.com/Izyanb

prog.cpp:11:56: error: use of deleted function ‘std::basic_stringstream<char>& std::basic_stringstream<char>::operator=(const std::basic_stringstream<char>&)’
   stream.operator=(std::move(std::stringstream("5678")));

O compilador declara que não há atribuição de cópia para as três instruções, o que é verdadeiro. No entanto, não consigo entender por que ela não está usando a atribuição de movimentação, especialmente porque std :: move deve retornar uma referência rvalue. Stringstream deve ter uma atribuição de movimentação, como mostrado aqui:http://en.cppreference.com/w/cpp/io/basic_stringstream/operator%3D

PS: Estou trabalhando com c ++ 11, portanto, as referências rvalue fazem parte do 'mundo'.

Troca

Achei isso muito estranho, copiei o código de exemplo do cplusplus.com e ele falhou:

// swapping stringstream objects
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream

int main () {

  std::stringstream foo;
  std::stringstream bar;

  foo << 100;
  bar << 200;

  foo.swap(bar);

  int val;

  foo >> val; std::cout << "foo: " << val << '\n';
  bar >> val; std::cout << "bar: " << val << '\n';

  return 0;
}

fonte:http://ideone.com/NI0xMS cplusplus.com fonte:http://www.cplusplus.com/reference/sstream/stringstream/swap/

prog.cpp: In function ‘int main()’:
prog.cpp:14:7: error: ‘std::stringstream’ has no member named ‘swap’
   foo.swap(bar);

o que estou perdendo? Por que não consigo mover ou trocar um fluxo de string? Como devo trocar ou mover um fluxo de string?

questionAnswers(2)

yourAnswerToTheQuestion