I have a generic base class that accepts N number of types:
template <typename... Ts>
class Base{};
When using secure inheritance in this base class
template <typename... Ts>
class Derived : protected Base<Ts...>{
};
I would like to additionally include public base class constructors:
template <typename... Ts>
class Derived : protected Base<Ts...>{
using Parent = Base<Ts...>;
using Parent::Parent;
};
It works.
However, why should I include an alias Parent?
It doesn't seem like I can get constructors without it. The following attempt does not work:
template <typename... Ts>
class Derived : protected Base<Ts...>{
using Base<Ts...>::Base<Ts...>;
};
Error:
clang++ -std=c++1z -o main v.cpp
error: expected ';' after using declaration
using Base<Ts...>::Base<Ts...>;
^
;
1 error generated.
I can cut off part of the template and it compiles, but this does not look right:
template <typename... Ts>
class Derived : protected Base<Ts...>{
using Base<Ts...>::Base;
};
The reason I don't think this is right is because it does not work on a vector.
not compiling:
template <typename... Ts>
class Derived : protected std::vector<Ts...>{
using std::vector<Ts...>::std::vector;
};
However, using an alias does work.
compiles:
template <typename... Ts>
class Derived : protected std::vector<Ts...>{
using Parent = std::vector<Ts...>;
using Parent::Parent;
};
:
, , , ?