C ++ 11 unión anónima con miembros no triviales

Estoy actualizando una estructura mía y quería agregarle un miembro std :: string. La estructura original se ve así:

struct Value {
  uint64_t lastUpdated;

  union {
    uint64_t ui;
    int64_t i;
    float f;
    bool b;
  };
};

Por supuesto, solo agregar un miembro std :: string a la unión provoca un error de compilación, porque normalmente se necesitaría agregar los constructores no triviales del objeto.En el caso de std :: string (texto de informit.com)

Dado que std :: string define las seis funciones miembro especiales, U tendrá un constructor predeterminado, constructor de copia, operador de asignación de copia, constructor de movimiento, operador de asignación de movimiento y destructor eliminados implícitamente. Efectivamente, esto significa que no puede crear instancias de U a menos que defina explícitamente algunas o todas las funciones especiales del miembro.

Luego, el sitio web continúa con el siguiente código de muestra:

union U
{
int a;
int b;
string s;
U();
~U();
};

Sin embargo, estoy usando una unión anónima dentro de una estructura. Le pregunté a ## C ++ en freenode y me dijeron que la forma correcta de hacerlo era poner al constructor en la estructura y me dio este código de ejemplo:

#include <new>

struct Point  {
    Point() {}
    Point(int x, int y): x_(x), y_(y) {}
    int x_, y_;
};

struct Foo
{
  Foo() { new(&p) Point(); }
  union {
    int z;
    double w;
    Point p;
  };
};

int main(void)
{
}

Pero a partir de ahí no puedo imaginar cómo hacer el resto de las funciones especiales que std :: string necesita definir, y además, no estoy del todo claro sobre cómo funciona el ctor en ese ejemplo.

¿Puedo conseguir que alguien me explique esto un poco más claro?

Respuestas a la pregunta(2)

Su respuesta a la pregunta