1// { dg-do assemble  }
2// Origin: Andreas Kloeckner <ak@ixion.net>
3
4template<class Iterator> struct iterator_traits {
5  typedef typename Iterator::iterator_category
6  iterator_category; // { dg-error "" } no type iterator_category
7};
8
9template<class Category>
10struct iterator {
11  typedef Category  iterator_category;
12};
13
14
15template <class Iterator>
16struct reverse_iterator : public // { dg-message "required" } no type iterator_category
17iterator<typename iterator_traits<Iterator>::iterator_category> {
18  protected:
19  Iterator current;
20
21};
22class tag { };
23
24template <class T>
25struct list {
26  template <class Item>
27  struct list_iterator {
28  };
29
30  reverse_iterator<list_iterator<T> > rbegin()
31    { return reverse_iterator<list_iterator<T> >
32	(list_iterator<T>(Head->next())); } // { dg-error "" } not declared
33};
34
35template class list<int>;
36