Template problem (from `iterator_traits')

Lassi A. Tuura lat@iki.fi
Fri Nov 6 08:56:00 GMT 1998


I report the following problem but I have no idea whether it is bug in
the code or in the compilers; I do not have access to the standard or a
recent version of the draft right now. 

---- bug.cxx
#include <iterator>
struct X {
  typedef int value_type;
  typedef int difference_type;
  typedef int *pointer;
  typedef int &reference;
  struct I { typedef std::random_access_iterator_tag iterator_category; };

int main (int, char **)
  std::iterator_traits<X::I>::value_type v = 10;
  std::iterator_traits<X::I>::pointer p = &v;
  std::iterator_traits<X::I>::reference r = *p;
  std::iterator_traits<X::I>::difference_type d = 1;

  p += d; r = 20;
  return r;

I would expect the compiler look up `value_type' etc. in enclosing
scopes, but KCC 3.3e (on HP-UX 10.20) gives:

"/afs/cern.ch/user/l/lat/public/src/KCC-3.3e/KCC_BASE/include/iterator", line 69: error: 
          class "X::I" has no member "difference_type"
       typedef typename Iterator::difference_type    difference_type;

And EGCS 1.1b (on RH5.1 Linux) says:

bug.cxx: In instantiation of `iterator_traits<X::I>':
bug.cxx:12:   instantiated from here
bug.cxx:12: no type named `value_type' in `struct X::I'

Any ideas?

With sufficient thrust, pigs fly just fine.  However, this is not
necessarily a good idea.  It is hard to be sure where they are going
to land, and it could be dangerous sitting under them as they fly
overhead.  --RFC1925, "The Twelve Networking Truths"

More information about the Gcc-bugs mailing list