Create a template class for same algorithm different type of member variable
I'm not sure I understand exactly what you're going for, but I think your Base_template has way too many parameters. You have:

template &lt;typename Data, typename... Data_arg&gt;
class Base_template {
public:
    Base_template(Data_arg...data_arg): _data(data_arg...) {}
    void set_all() {
        for (int i = 0; i &lt; _data._size; ++i) _data[i] = _val;
    }
protected:
    int _val;
    Data _data;
};


but I think all you want is:

template &lt;typename Data&gt;
class Base_template {
public:
    template&lt;typename... Args&gt;
    Base_template(Args&amp;&amp;... args): _data(std::forward&lt;Args&gt;(args)...) {}
    void set_all() {
        for (int i = 0; i &lt; _data._size; ++i) _data[i] = _val;
    }
protected:
    int _val;
    Data _data;
};




Also, notice in passing that your naming convention of "leading underscore" might lead you into conflict with reserved identifiers if you're not super careful. I prefer to use "trailing underscore" for private member variables, just so that I don't have to think about the complicated reserved-identifier rules at all.