// RUN: %clang_cc1 %s -verify // PR11358 namespace test1 { template<typename T> struct container { class iterator {}; iterator begin() { return iterator(); } }; template<typename T> struct Test { typedef container<T> Container; void test() { Container::iterator i = c.begin(); // expected-error{{missing 'typename'}} } Container c; }; } namespace test2 { template <typename Key, typename Value> class hash_map { class const_iterator { void operator++(); }; const_iterator begin() const; const_iterator end() const; }; template <typename KeyType, typename ValueType> void MapTest(hash_map<KeyType, ValueType> map) { for (hash_map<KeyType, ValueType>::const_iterator it = map.begin(); // expected-error{{missing 'typename'}} it != map.end(); it++) { } } } namespace test3 { template<typename T> struct container { class iterator {}; }; template<typename T> struct Test { typedef container<T> Container; void test() { Container::iterator const i; // expected-error{{missing 'typename'}} } Container c; }; }