Quando devo usar a palavra-chave "typename" ao usar modelos

Ultimamente, tenho trabalhado em um projeto pequeno e não consegui descobrir algo.

Recebi um arquivo .h que continha uma classe, usando um modelo de nome de tipo. Dentro dessa aula havia uma aula particular.

template <typename T>
class Something
{
public:
        Something();
        ~Something();

        Node* Function1(int index);
        int Index(const T& id);


private:
        class Node()
        {
                public:
                T id;

                //Imagine the rest for the Node


        };      
};

O problema ocorreu quando eu quis definir as funções da classe "Something"

Aqui está como eu estava fazendo isso (em um arquivo .inl)

template<typename T>
Node* Something::Function1(int index) //Is the return type well written?
{
        // returns the node at the specified index
}

template<typename T>
int Something::Index(const T& id) //Is the parameter type well specified?
{
        // returns the index of the node with the specified id
}

Portanto, a parte de erros estava na parte de definições ... Preciso informar ao compilador que o tipo de retorno (neste caso, Nó *) usa o modelo de nome de tipo (assim:typename Node*)? E o parâmetro?typename const Node& ?

Então, basicamente, quando devo especificar se a função / parâmetro usa um modelo?

Obrigado pelo seu tempo.

questionAnswers(4)

yourAnswerToTheQuestion