The code :
    template< typename... TemplateArguments >
    class Tuple
    {}
    template< typename ExposedType, typename... TemplateArguments >
    class Tuple< ExposedType, TemplateArguments... > : public Tuple< TemplateArguments... >
    {
    public:
        template < uint64_t ArgumentNumber >
        typename std::enable_if< ArgumentNumber != 1, typename TypeHolder< ArgumentNumber, Tuple< ExposedType, TemplateArguments... > >::m_type& >::m_type Entry();
        template < uint64_t ArgumentNumber >
        typename std::enable_if< ArgumentNumber == 1, typename TypeHolder< 1, Tuple< ExposedType > >::m_type& >::m_type Entry();
        ExposedType m_data;
    };
    template< uint64_t ArgumentNumber, typename ExposedType >
    class TypeHolder
    {};
    template< typename ExposedType, typename... TemplateArguments >
    class TypeHolder< 1, Tuple< ExposedType, TemplateArguments... > >
    {
    public:
        typedef ExposedType m_type;
    };
    template< uint64_t NumberOfArguments, typename ExposedType, typename... TemplateArguments >
    class TypeHolder< NumberOfArguments, Tuple< ExposedType, TemplateArguments... > >
    {
    public:
        typedef typename TypeHolder< NumberOfArguments - 1, Tuple< TemplateArguments... > >::m_type m_type;
    };
And the implementation of the entry methods :
    template< typename ExposedType, typename... TemplateArguments >
    template < uint64_t ArgumentNumber >
    typename std::enable_if< ArgumentNumber != 1, typename TypeHolder< ArgumentNumber, Tuple< ExposedType, TemplateArguments... > >::m_type& >::m_type Tuple< ExposedType, TemplateArguments... >::Entry() 
    {
        Tuple< TemplateArguments... >& baseTuple = *this;
        return ( baseTuple.EntryL< ArgumentNumber - 1 >() );
    }
    template< typename ExposedType, typename... TemplateArguments >
    template < uint64_t ArgumentNumber >
    typename std::enable_if< ArgumentNumber == 1, typename TypeHolder< 1, Tuple< ExposedType > >::m_type& >::m_type Tuple< ExposedType, TemplateArguments... >::Entry() 
    {
        return ( m_data );
    }
The point is to create a tuple object that has a method that returns a reference to the required element, when the use should be like this :
Tuple< int, int > tuple_1( 8, 10 );
tuple_1.Entry< 1 >() = 14;
When trying to compile this I get the error :
error: expected primary-expression before ‘)’ token
return ( baseTuple.Entry< ArgumentNumber - 1 >() );
                                                ^
Can anyone help with this problem? or to show the right way how to do this?
Thank you!!
Edit:
It works if I add true :
return ( baseTuple.EntryL< ArgumentNumber - 1 >( true ) );
Why??