Следующий код компилируется правильно в g++ и clang:
template<typename T>
struct foo
{
class iterator;
using bar = foo::iterator;
};
int main() {}
однако MSVC 2013 дает следующие ошибки:
foo.cpp(9): error C2061: syntax error : identifier 'iterator'
foo.cpp(10) : see reference to class template instantiation 'foo<T>' being compiled
foo.cpp(9): error C2238: unexpected token(s) preceding ';'
Если я изменил эту строку на:
using bar = typename foo::iterator;
то все три компилятора скомпилируют его успешно. Верна ли исходная версия? (т.е. это ошибка MSVC или расширение gcc/clang)