At first sight, using
imports a specific function (such as using std::cout
to the scope). But this using
imports all the base class constructors to the derived class.
template< typename T >
class Vec : public std::vector< T >
{
public:
using std::vector<T>::vector; // ???
//...
};
What's actually behind the scenes of this `using` declaration?
As it's
public
inherited, supposedly all the base class constructors should have been available already (ie why needusing
)?
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.