Кажется, что вы просто пропускаете typename
перед MyList<T>::reference
, поскольку это зависимый тип (тот, который зависит от типа T
), и компилятор не знает, что MyList<T>::reference
является типом и по умолчанию предполагает, что это имя переменной:
template <class T>
typename MyList<T>::reference MyList<T>::find(
const_reference p_constreferenceItem) const
Это не нужно для const_reference
, поскольку компилятор находится в области действия MyList<T>
, как только онвидел ::
(имя метода) и теперь знает, что const_reference
называет тип.Точно так же вам не нужно использовать typename
, когда вы уже находитесь в области действия MyList<T>
, например, при объявлении или определении inline-метода внутри определения класса.
I 'Я не уверен, почему VC6 позволил это, хотя.Но мы все знаем, что VC6 и шаблоны - не такие уж большие друзья, не говоря уже о свободной спецификации шаблонов C ++ и их поведении в то время.немного неформально.