Prev: Using std container to hold boost::shared_ptr with template parameter
Next: Customizing compare in bsearch()
From: Daniel Krügler on 22 Mar 2010 08:22 On 22 Mrz., 19:04, Jardel Weyrich <jweyr...(a)gmail.com> wrote: > Compiling the program below, gives these 2 errors: > > 1. test.cpp:10: error: type std::set<boost::shared_ptr<X>, > std::less<boost::shared_ptr<X> >, std::allocator<boost::shared_ptr<X>> > is not derived from type A<T> > > 2. test.cpp:10: error: expected ; before iterator > > However, if I "typedef int type", it compiles fine. The Boost > documentation mentions the following: > > "Every shared_ptr meets the CopyConstructible and Assignable > requirements of the C++ Standard Library, and so can be used in > standard library containers. Comparison operators are supplied so that > shared_ptr works with the standard library's associative containers. > > The class template is parameterized on T, the type of the object > pointed to. shared_ptr and most of its member functions place no > requirements on T; it is allowed to be an incomplete type, or void. > Member functions that do place additional requirements (constructors, > reset) are explicitly documented below." > > I thought the std allocator or the comparison operator could be the > cause, but I don't see a reasonable explanation for this. Any clue? > > -code- > #include <boost/shared_ptr.hpp> > #include <set> > > template <class T> > class A { > public: > typedef T type; > typedef boost::shared_ptr<type> shared_type; > typedef std::set<shared_type> container; > typedef container::iterator iterator; This needs to be: typedef typename container::iterator iterator; > }; Without any further context information the above missing typename should be the only reason of error. C++ requires the typename prefix here, because container is a dependent type. And the (rather simple) rule in C++ is that every dependent name is assumed not to be a type. Of-course container::iterator *is* a type, so you have to attach the typename to make the compiler happy. HTH & Greetings from Bremen, Daniel Kr�gler -- [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ] |