Да, в определении функции-члена вне класса вы должны использовать полное имя для вложенного возвращаемого типа. Это, кстати, не имеет ничего общего с шаблонами. Так же и с не шаблонными классами.
В вашем случае это шаблонный класс, и, как следствие этого, поскольку вы используете квалифицированное имя для ссылки на вложенный тип в зависимом шаблонном классе, вы должны добавить к нему ключевое слово typename
.
Однако вам нужно только указать тип возвращаемого значения. Типы параметров не нужно указывать
template< typename T >
typename vector<T>::const_reference
vector<T>::some_method( const_reference r ) const
{
// ...
}
Вы можете также использовать квалифицированное имя для типа параметра, но в этом случае вам придется сделать то же самое, что и с типом возвращаемого значения (по той же причине): добавьте к нему ключевое слово typename
template< typename T >
typename vector<T>::const_reference
vector<T>::some_method( typename vector<T>::const_reference r ) const
{
// ...
}