Обновление Visual Studio 15.7: изменение наследования конструктора - PullRequest
0 голосов
/ 08 мая 2018

В примечаниях к выпуску последнего обновления Visual Studio (15.7) Microsoft заявляет (9-ая точка):

Наследование конструктора теперь работает так же, как и наследование любого другого члена базового класса. Ранее это работало, объявляя новый конструктор, который делегирует оригиналу; с этим изменением конструкторы базового класса видны в производном классе, как если бы они были конструкторами производного класса, улучшая согласованность в C ++.

Я немного запутался, что на самом деле означает эта точка.

AFAIK, наследование конструктора требует явного using BaseClass::BaseClass; (начиная с C ++ 11):

struct Base
{
    Base() = default;
    Base(int x) : x(x) {}

    int x;
};

struct Derivative : Base
{
    using Base::Base;
    Derivative(int x, int y) : Base(x), y(y) {}

    int y;
};

void main()
{
    Derivative x(10);  // this is ok
}

Мое понимание этой цитаты состоит в том, что MS допускает наследование конструктора без необходимости using BaseClass::BaseClass;. Но тестирование следующего кода после применения обновления, похоже, ничего не меняет в этом отношении:

struct Base
{
    Base() = default;
    Base(int x) : x(x) {}

    int x;
};

struct Derivative : Base
{   
    int y{};
};

void main()
{
    Derivative x(10);  // still illegal, compiler error
}

Мои вопросы:

  • Что на самом деле означает цитата? Что изменилось?
  • Как это улучшает согласованность в C ++ (AFAIK, стандарт ничего не изменил с точки зрения наследования ctor)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...