#include <vector>
#include <array>
template <typename T >
struct Foo {
typedef typename std::vector<T>::iterator Iterator;
inline void bar( const Iterator& it ) const;
std::vector<T> vec;
};
// Compiles fine without "typename"...
template <typename T>
inline void Foo<T>::bar( const typename Foo<T>::Iterator& it ) const {}
int main() {
Foo<float> f;
f.bar( f.vec.begin() );
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFycmF5Pgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA+IApzdHJ1Y3QgRm9vIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VD46Oml0ZXJhdG9yIEl0ZXJhdG9yOwoKICAgIGlubGluZSB2b2lkIGJhciggY29uc3QgSXRlcmF0b3ImIGl0ICkgY29uc3Q7CgogICAgc3RkOjp2ZWN0b3I8VD4gdmVjOwp9OwoKLy8gQ29tcGlsZXMgZmluZSB3aXRob3V0ICJ0eXBlbmFtZSIuLi4KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZSB2b2lkIEZvbzxUPjo6YmFyKCBjb25zdCB0eXBlbmFtZSBGb288VD46Okl0ZXJhdG9yJiBpdCApIGNvbnN0IHt9CgppbnQgbWFpbigpIHsKICAgIEZvbzxmbG9hdD4gZjsKICAgIGYuYmFyKCBmLnZlYy5iZWdpbigpICk7CiAgICByZXR1cm4gMDsKfQ==