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