C++ tuple implementation with get as a member
Your source is not very specific as to why/when my_tuple.template get&lt;0&gt;() is required.

If you have code like this:

Tuple&lt;int, double, float&gt; x(1,2,3);
int i = x.get&lt;0&gt;();


That is fine, because all template arguments to Tuple are known at the time of parsing and Tuple&lt;int, double, float&gt; is instantiated immediately, before the call to get is parsed. At that point the compiler already knows that in that specific instantiation of Tuple get is member function template rather than a non-template member and everything is ok.

This however

template&lt;typename T&gt;
auto foo(T t) {
    Tuple&lt;T,int,double&gt; x(t,2,3);
    return x.get&lt;0&gt;();
}


generates a compiler error, because when foo is parsed, the actual type of T is not known and instantiation of Tuple&lt;T,int,double&gt; needs to be delayed until instantiation of foo. This means that when x.get is parsed, the compiler does not yet know what kind of language construct get is in the instatiation of Tuple&lt;T,int,double&gt; and in fact it may very well vary for different T. Therefore it is assumed that get is a non-template member, which doesn't make sense considering the following template argument list.

Your code sadly does not solve this problem and I don't think it is solvable.

Additionally I noticed that your Tuple is an empty class if an empty type list is given. That is a bit inconsistent. I think at least get should be provided as empty function. Calling it should not be allowed, but referring to the member function should be fine.