Различия между двумя указателями шаблона

Я хочу знать, есть ли разница между двумя указателями (как членами данных) в классе шаблона. Например:

template <typename E>
class Link
{
private:
    E element;
    Link* a;
    Link<E>* b;
};

Интересно? "Является ли" a "аналогичным" b "?

Ответ 1

Обе формы действительны. Когда имя шаблона класса используется внутри рамки шаблона класса без аргументов шаблона, оно разрешает имя "текущей" специализации шаблона.

a и b имеют a и тот же тип.

Это то же правило, что позволяет нам писать, например:

template<typename T>
Foo<T>::Foo(Foo const&) = default;

... вместо более подробных:

template<typename T>
Foo<T>::Foo(Foo<T> const&) = default;