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
publicinherited, 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
usingdeclaration?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With