Hello all, I am pretty sure I am not getting something conceptually here, but can anyone shed some light please. I am writing a template class which contains a std::list of weak_ptr<t1> template<typename T1> class fred { private : typedef boost::weak_ptr<T1> MyPtr; typdef std::list<MyPtr> MyPtrList; MyPtrList MyList; public : DoSomething() { MyPtrList::iterator pos; for (pos = MyList.begin(); pos < MyList.end(); ++pos) { ...do stuff.. } } } Now that looks fine to me, but the line where I declare the iterator fails with a error: Expect ';' before 'pos' and I don't know why - it seems fine to me. Using boost 1.33.1 recent cross compiler to ARM. What have I missed? I have tried direct declaration (not using the typedefs') and get the same result. If I put list<int>::iterator that compiles fine. James