Недопустимый член профсоюза в VS2013, но не в 2015 году - PullRequest
0 голосов
/ 09 октября 2018

У меня есть класс

class myTestClass
{
public:
    int a;
    myTestClass();
    ~myTestClass();
private:
    float b;
};

, который я пытаюсь добавить в объединение

union myUnion
{
    myTestClass mt;
    int l;
    float f;
};

В Visual Studio 2013 я получаю ошибку "Недопустимый член объединения - класс"myTestClass "имеет запрещенную функцию-член.Похоже, это сообщение вызвано конструктором (а не другой функцией, которую я пытался добавить).

При тестировании в Visual Studio 2015 ошибка, похоже, исчезла.К сожалению, проект находится на VS2013 и не может быть перемещен (или, по крайней мере, он не будет для этой одной маленькой проблемы).

Если посмотреть на этот вопрос , то кажется, чтоКонструкция считается недопустимой функцией-членом, но разрешена в C ++ 11.Я предполагаю, что эта часть спецификации была введена между VS13 и VS15.

Почему конструктор специально запрещен, а не другая функция?Есть ли способ обойти это в VS2013?Один из ответов на вопрос, упомянутый выше, предложил поместить класс в структуру в объединении.Однако мой союз уже находится в другой структуре, и я пытаюсь избежать ненужных слоев в коде.

...