Я знаю, что ключевые слова typename
и class
взаимозаменяемы в аргументах шаблона, но я подумал, что только typename
разрешено для спецификации вложенных классов.
Однажды я случайно написал неправильно « class
» вместо « typename
» для вложенного класса.
И я обнаружил, что gcc принимает там класс
, поэтому вы можете написать что-то вроде:
class std::vector<T>::iterator it;
instead of
typename std::vector<T>::iterator it;
в своем шаблоне.
Это ошибка gcc или стандарт действительно допускает такой синтаксис?
] ОБНОВЛЕНИЕ: пример кода:
template <typename T>
void test()
{
class std::vector<T>::iterator it;
}