Because the following is perfectly valid:
class Parent { public: Parent(int i) { } }; class Child : public Parent { public: Child() : Parent(42) { } };
How is the compiler to guess whether you want the derived child to have a forwarded constructor? And in the case of multiple inheritance, the set of constructors from the two types may not match; when forwarding a constructor from base class A, which constructor on base class B should be called?
Technically, I suppose the language designers could have said that if the type has a single base class and in the absence of an explicit constructor, all parent constructors are forwarded. However, that creates the opposite problem: if a base class has multiple constructors including a default constructor, and the child wishes to allow only the default constructor, this must now be explicitly specified.
usingstatement, e.g.,using Parent::Parent;, but I wonder if the lack of constructor inheritance in general is also due to arbitrary historical reasons.using Parent::Parent;), but your idea was rejected (but I don't have a quote).