Mover o intercambiar una secuencia de cadenas

Quiero mover un flujo de cadena, en la aplicación del mundo real tengo algún miembro de datos de clase de flujo de cadena, que quiero reutilizar para diferentes cadenas durante la operación.

stringstream no tiene una asignación de copia o un constructor de copia, lo que tiene sentido. Sin embargo, de acuerdo con cppreference.com y cplusplus.com, std :: stringstream debería tener una asignación de movimiento y una operación de intercambio definidas. Intenté ambos, y ambos fallan.

Mover asignación
#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;
}

fuente: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")));

El compilador afirma que no hay asignación de copia para las tres declaraciones, lo cual es cierto. Sin embargo, no veo por qué no está utilizando la asignación de movimiento, especialmente porque se supone que std :: move devuelve una referencia de valor. Stringstream debe tener una asignación de movimiento, como se muestra aquí:http://en.cppreference.com/w/cpp/io/basic_stringstream/operator%3D

PD: estoy trabajando con c ++ 11, por lo tanto, las referencias de valor son parte del 'mundo'.

Intercambiar

Esto me pareció realmente extraño, copié el código de ejemplo de cplusplus.com y falló:

// 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;
}

fuente:http://ideone.com/NI0xMS Fuente cplusplus.com: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);

¿Qué me estoy perdiendo? ¿Por qué no puedo mover o intercambiar una secuencia de cadenas? ¿Cómo debo cambiar o mover una secuencia de cadena?

Respuestas a la pregunta(2)

Su respuesta a la pregunta