PR11358.cpp revision 443aac9bd22624c6abb1fe7e581ac30c4e654eea
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