Consider:
struct B { void f(); private: B(int, int = 0); }; struct D : B { using B::B; }; void B::f() { auto a = D{0}; auto b = D(0); auto