Mover-asignación y miembro de referencia

La asignación de copia para una clase con una variable miembro de referencia es un no-no porque no puede reasignar la referencia. Pero ¿qué pasa con la asignación de movimiento? Lo intenté simplementemovepero, por supuesto, eso destruye el objeto de origen cuando solo quiero mover la referencia en sí:

class C
{
public:
    C(X& x) : x_(x) {}
    C(C&& other) : x_(std::move(other.x_)) {}
    C& operator=(C&& other)
    {
        x_ = std::move(other.x_);
    }
private:
    X& x_;
};

X y;
C c1(y);

X z;
C c2(z);

c2 = c1; // destroys y as well as z

¿Debería simplemente no implementar la asignación de movimientos y seguir solo la construcción de movimientos? Lo que haceswap(C&, C&) Difícil de implementar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta