C ++ 11 união anônima com membros não triviais

Estou atualizando uma estrutura minha e eu estava querendo adicionar um membro std :: string a ele. A estrutura original se parece com isso:

struct Value {
  uint64_t lastUpdated;

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

Apenas adicionar um membro std :: string à união, é claro, causa um erro de compilação, porque normalmente seria necessário adicionar os construtores não-triviais do objeto.No caso de std :: string (texto de informit.com)

Como std :: string define todas as seis funções especiais de membro, U terá um construtor padrão, construtor de cópia, operador de atribuição de cópia, construtor de movimento, operador de atribuição de movimento e destruidor. Efetivamente, isso significa que você não pode criar instâncias de U, a menos que você defina algumas ou todas as funções de membros especiais explicitamente.

Em seguida, o site continua fornecendo o seguinte código de amostra:

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

No entanto, estou usando uma união anônima em uma estrutura. Eu pedi ## C ++ no freenode e eles me disseram que a maneira correta de fazer isso era colocar o construtor no struct e me deu este código de exemplo:

#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)
{
}

Mas a partir daí não consigo imaginar como fazer o resto das funções especiais que o std :: string precisa definir e, além disso, não estou totalmente claro sobre como o ctor nesse exemplo está funcionando.

Posso pedir a alguém para me explicar isso um pouco mais claro?

questionAnswers(2)

yourAnswerToTheQuestion