As it's public inherited, supposedly all the base class constructors
should have been available already (ie why need using)?
No, constructors of the base class are not inherited by default. A detailed explanation can be found in the following discussions:
What's actually behind the scene of this using declaration?
From cppreference.com, using does
- Using-declarations can be used to introduce namespace members into
other namespaces and block scopes, or to introduce base class
members into derived class definitions.
- [...] (c++20 specific...)
Also while inheritance:
If the using-declaration refers to a constructor of a direct base of
the class being defined (e.g. using Base::Base;), all constructors
of that base (ignoring member access) are made visible to overload
resolution when initializing the derived class.
using). thanks