Training courses
Kernel and Embedded Linux
Bootlin training courses
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
// 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; }; }