1// RUN: %clang_cc1 %s -verify 2// PR11358 3 4namespace test1 { 5 template<typename T> 6 struct container { 7 class iterator {}; 8 iterator begin() { return iterator(); } 9 }; 10 11 template<typename T> 12 struct Test { 13 typedef container<T> Container; 14 void test() { 15 Container::iterator i = c.begin(); // expected-error{{missing 'typename'}} 16 } 17 Container c; 18 }; 19} 20 21namespace test2 { 22 template <typename Key, typename Value> 23 class hash_map { 24 class const_iterator { void operator++(); }; 25 const_iterator begin() const; 26 const_iterator end() const; 27 }; 28 29 template <typename KeyType, typename ValueType> 30 void MapTest(hash_map<KeyType, ValueType> map) { 31 for (hash_map<KeyType, ValueType>::const_iterator it = map.begin(); // expected-error{{missing 'typename'}} 32 it != map.end(); it++) { 33 } 34 } 35} 36 37namespace test3 { 38 template<typename T> 39 struct container { 40 class iterator {}; 41 }; 42 43 template<typename T> 44 struct Test { 45 typedef container<T> Container; 46 void test() { 47 Container::iterator const i; // expected-error{{missing 'typename'}} 48 } 49 Container c; 50 }; 51} 52