C ++ 11 анонимный союз с нетривиальными членами

Я обновляю свою структуру и хотел добавить к ней член std :: string. Исходная структура выглядит так:

struct Value {
  uint64_t lastUpdated;

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

Конечно, простое добавление члена std :: string в объединение вызывает ошибку компиляции, потому что обычно нужно добавлять нетривиальные конструкторы объекта.В случае с std :: string (текст с informit.com)

Since std::string defines all of the six special member functions, U will have an implicitly deleted default constructor, copy constructor, copy assignment operator, move constructor, move assignment operator and destructor. Effectively, this means that you can't create instances of U unless you define some, or all of the special member functions explicitly.

Затем веб-сайт дает следующий пример кода:

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

Однако я использую анонимное объединение в структуре. Я спросил ## C ++ на freenode, и они сказали мне, что правильный способ сделать это - поместить конструктор в структуру и дал мне этот пример кода:

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

Но оттуда я не могу понять, как определить остальные специальные функции, которые нужны std :: string, и, кроме того, я не совсем понимаю, как работает ctor в этом примере.

Могу ли я попросить кого-нибудь объяснить это мне немного яснее?

Ответы на вопрос(2)

Ваш ответ на вопрос