Как работает наследование полей у шаблонного класса?
Наследование работает так же как и у не-шаблонного класса, а поиск имён -- по-другому.
Почему не получается неявно найти, что head и tail это поля базового класса?
Потому что имена head и tail не являются
именами, которые могут быть использованы в определении шаблона -- они не T, не являются зависимыми и не определены в видимых из определения шаблона неймспейсах.
(соответственно, пофиксить можно не только написав
myList<T>::head
, но и
this->head
, оба эти изменения делают имя head зависимым [от параметра шаблона]).
Это правило поиска имён отличается от
правил поиска имён в обычных классах, которое
включает в себя родительские классы.