En las notas de la versión de la última actualización de Visual Studio (15.7), Microsoft declara (novena viñeta):
Heredar un constructor ahora funciona igual que heredar cualquier otro miembro de clase base. Anteriormente, esto funcionaba al declarar un nuevo constructor que delega al original; con este cambio, los constructores de la clase base son visibles en una clase derivada como si fueran constructores de la clase derivada, mejorando la consistencia en C ++.
Estoy un poco confundido lo que realmente significa ese punto.
AFAIK, la herencia del constructor requiere un using BaseClass::BaseClass;
explícito de using BaseClass::BaseClass;
(desde 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 }
Mi comprensión de la cita es que MS permite la herencia del constructor sin la necesidad de using BaseClass::BaseClass;
. Pero probar el siguiente código después de aplicar la actualización no parece cambiar nada al respecto:
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 }
Mis preguntas son: