[ptr_container] and bcc32

I'm trying the regression tests on bcc32 5.6.4. The first error (and often occuring one with bcc32) is in detail/static_move_ptr.hpp line 70 should be changed from static_move_ptr( const move_ptrs::move_source<static_move_ptr>& src ) to static_move_ptr( const move_ptrs::move_source<static_move_ptr<T, Deleter> >& src ) The next is in detail/reversible_ptr_container.hpp line 117 where typedef null_clone_allocator<allow_null> null_cloner_type; needs to be typedef null_clone_allocator<reversible_ptr_container::allow_null> null_cloner_type; The next is in ptr_vector.hpp line 43: BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector, needs to be BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector<T,CloneAllocator,Allocator>, And the same in ptr_deque. I guess this is the same for the other ptr_XXXX.hpp files (list,set,map etc). The next error I'm not so sure on is in tutl.cpp line 233: tut1.cpp: Error E2227 tut1.cpp 233: Extra parameter in call to boost::ptr_deque<animal,boost::heap_clone_allocator,_STL::allocator<void *> >::release() in function farm::sell_animal(boost::void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>) Error E2034 tut1.cpp 233: Cannot convert '_STL::auto_ptr<boost::ptr_deque<animal,boost::heap_clone_allocator,_STL::allocator<void *> > >' to 'boost::ptr_container_detail::static_move_ptr<animal,boost::ptr_container_detail::clone_deleter<boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> >
,boost::heap_clone_allocator>::null_clone_allocator<0> > >' in function farm::sell_animal(boost::void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>)
Cheers Russell

Hi Russell, "Russell Hind" <rh_gmane@mac.com> wrote in message news:d5pu31$q8s$1@sea.gmane.org... | I'm trying the regression tests on bcc32 5.6.4. The first error (and | often occuring one with bcc32) is in detail/static_move_ptr.hpp line 70 | should be changed from | | static_move_ptr( const move_ptrs::move_source<static_move_ptr>& src ) | | to | | static_move_ptr( const move_ptrs::move_source<static_move_ptr<T, | Deleter> >& src ) | | The next is in detail/reversible_ptr_container.hpp line 117 where | | typedef null_clone_allocator<allow_null> | null_cloner_type; | | needs to be | | typedef | null_clone_allocator<reversible_ptr_container::allow_null> | null_cloner_type; | | The next is in ptr_vector.hpp line 43: | | BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector, | | needs to be | | BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( | ptr_vector<T,CloneAllocator,Allocator>, | | And the same in ptr_deque. I guess this is the same for the other | ptr_XXXX.hpp files (list,set,map etc). Thanks. I have applied them and comitted. | The next error I'm not so sure on is in tutl.cpp line 233: | | tut1.cpp: | Error E2227 tut1.cpp 233: Extra parameter in call to I don't get this error. Do you know what the fix is? -Thorsten

Thorsten Ottosen wrote:
Thanks. I have applied them and comitted.
I've had to make some mods as Borland doesn't appear to like template statements in macros. See attached but don't apply this without reading my comments below
| The next error I'm not so sure on is in tutl.cpp line 233: | | tut1.cpp: | Error E2227 tut1.cpp 233: Extra parameter in call to
I don't get this error. Do you know what the fix is?
I think the problem is the 'using base_type::release' in the macros at the end of reversible_ptr_container.hpp I don't think Borland is picking these up. I've tried to implement a release instead of the using, which just passes it on to base_type. This works for ptr_vector, but gives more compile errors in ptr_deque due to auto_type. Maybe you can help with this? The other common error is on ptr_sequence_adaptor.hpp line 99. Perhaps you understand what is happening here to? I've attached my test output also. Thanks Russell Index: boost/ptr_container/detail/reversible_ptr_container.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/detail/reversible_ptr_container.hpp,v retrieving revision 1.12 diff -u -r1.12 reversible_ptr_container.hpp --- boost/ptr_container/detail/reversible_ptr_container.hpp 10 May 2005 21:22:23 -0000 1.12 +++ boost/ptr_container/detail/reversible_ptr_container.hpp 11 May 2005 09:05:49 -0000 @@ -40,7 +40,7 @@ namespace boost { - + namespace ptr_container_detail { @@ -63,18 +63,18 @@ struct is_pointer_or_integral_tag {}; struct is_range_tag {}; - - + + template - < - class Config, + < + class Config, class CloneAllocator > - class reversible_ptr_container + class reversible_ptr_container { private: BOOST_STATIC_CONSTANT( bool, allow_null = Config::allow_null ); - + typedef BOOST_DEDUCED_TYPENAME Config::value_type Ty_; template< bool allow_null_values > @@ -82,10 +82,10 @@ { template< class Iter > static Ty_* allocate_clone_from_iterator( Iter i ) - { + { return allocate_clone( Config::get_const_pointer( i ) ); } - + static Ty_* allocate_clone( const Ty_* x ) { if( allow_null_values ) @@ -100,7 +100,7 @@ return CloneAllocator::allocate_clone( *x ); } - + static void deallocate_clone( const Ty_* x ) { if( allow_null_values ) @@ -114,12 +114,12 @@ }; typedef BOOST_DEDUCED_TYPENAME Config::void_container_type Cont; -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - typedef null_clone_allocator<reversible_ptr_container::allow_null> +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef null_clone_allocator<reversible_ptr_container::allow_null> null_cloner_type; #else typedef null_clone_allocator<allow_null> null_cloner_type; -#endif +#endif typedef clone_deleter<null_cloner_type> Deleter; Cont c_; @@ -129,59 +129,59 @@ const Cont& c_private() const { return c_; } public: // typedefs - typedef BOOST_DEDUCED_TYPENAME Config::object_type + typedef BOOST_DEDUCED_TYPENAME Config::object_type object_type; typedef Ty_* value_type; typedef Ty_* pointer; typedef Ty_& reference; typedef const Ty_& const_reference; - - typedef BOOST_DEDUCED_TYPENAME Config::iterator + + typedef BOOST_DEDUCED_TYPENAME Config::iterator iterator; typedef BOOST_DEDUCED_TYPENAME Config::const_iterator const_iterator; typedef BOOST_DEDUCED_TYPENAME Config::reverse_iterator reverse_iterator; - typedef BOOST_DEDUCED_TYPENAME Config::const_reverse_iterator + typedef BOOST_DEDUCED_TYPENAME Config::const_reverse_iterator const_reverse_iterator; typedef BOOST_DEDUCED_TYPENAME Cont::difference_type - difference_type; + difference_type; typedef BOOST_DEDUCED_TYPENAME Cont::size_type size_type; typedef BOOST_DEDUCED_TYPENAME Config::allocator_type allocator_type; - typedef ptr_container_detail::static_move_ptr<Ty_,Deleter> + typedef ptr_container_detail::static_move_ptr<Ty_,Deleter> auto_type; - - protected: - + + protected: + typedef ptr_container_detail::scoped_deleter<Ty_,null_cloner_type> scoped_deleter; typedef BOOST_DEDUCED_TYPENAME Cont::iterator - ptr_iterator; + ptr_iterator; typedef BOOST_DEDUCED_TYPENAME Cont::const_iterator - ptr_const_iterator; + ptr_const_iterator; private: - template< class InputIterator > - void copy( InputIterator first, InputIterator last ) + template< class InputIterator > + void copy( InputIterator first, InputIterator last ) { std::copy( first, last, begin() ); } - + void copy( const reversible_ptr_container& r ) - { + { copy( r.begin(), r.end() ); } - + void copy_clones_and_release( scoped_deleter& sd ) // nothrow { BOOST_ASSERT( size_type( std::distance( sd.begin(), sd.end() ) ) == c_.size() ); std::copy( sd.begin(), sd.end(), c_.begin() ); - sd.release(); + sd.release(); } - + void insert_clones_and_release( scoped_deleter& sd ) // strong { c_.insert( sd.begin(), sd.end() ); @@ -189,8 +189,8 @@ } template< class ForwardIterator > - void clone_assign( ForwardIterator first, - ForwardIterator last ) // strong + void clone_assign( ForwardIterator first, + ForwardIterator last ) // strong { BOOST_ASSERT( first != last ); scoped_deleter sd( first, last ); // strong @@ -205,34 +205,34 @@ scoped_deleter sd( first, last ); insert_clones_and_release( sd, end() ); } - - void remove_all() + + void remove_all() { - remove( begin(), end() ); + remove( begin(), end() ); } protected: - void insert_clones_and_release( scoped_deleter& sd, + void insert_clones_and_release( scoped_deleter& sd, iterator where ) // strong { // // 'c_.insert' always provides the strong guarantee for T* elements // since a copy constructor of a pointer cannot throw // - c_.insert( where.base(), - sd.begin(), sd.end() ); + c_.insert( where.base(), + sd.begin(), sd.end() ); sd.release(); } template< class I > void remove( I i ) - { + { null_policy_deallocate_clone( Config::get_const_pointer(i) ); } template< class I > - void remove( I first, I last ) + void remove( I first, I last ) { for( ; first != last; ++first ) remove( first ); @@ -242,7 +242,7 @@ BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type adl_begin( Range& r ) { - #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) return begin( r ); #else using boost::begin; @@ -254,14 +254,14 @@ BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type adl_end( Range& r ) { - #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) return end( r ); #else using boost::end; return end( r ); #endif } - + static void enforce_null_policy( Ty_* x, const char* msg ) { if( !allow_null ) @@ -283,27 +283,27 @@ private: template< class ForwardIterator > - ForwardIterator advance( ForwardIterator begin, size_type n ) + ForwardIterator advance( ForwardIterator begin, size_type n ) { ForwardIterator iter = begin; std::advance( iter, n ); return iter; } - + private: reversible_ptr_container( const reversible_ptr_container& ); void operator=( const reversible_ptr_container& ); - + public: // foundation! should be protected! - explicit reversible_ptr_container( const allocator_type& a = allocator_type() ) + explicit reversible_ptr_container( const allocator_type& a = allocator_type() ) : c_( a ) {} - + template< class PtrContainer > explicit reversible_ptr_container( std::auto_ptr<PtrContainer> clone ) - : c_( allocator_type() ) - { - swap( *clone ); + : c_( allocator_type() ) + { + swap( *clone ); } private: @@ -330,13 +330,18 @@ // overhead: null-initilization of container pointer (very cheap compared to cloning) // overhead: 1 heap allocation (very cheap compared to cloning) template< class InputIterator > - reversible_ptr_container( InputIterator first, + reversible_ptr_container( InputIterator first, InputIterator last, const allocator_type& a = allocator_type() ) // basic, strong : c_( a ) - { + { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + constructor_impl( first, last, + iterator_category<InputIterator>::type() ); +#else constructor_impl( first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); +#endif } template< class Compare > @@ -344,40 +349,40 @@ const allocator_type& a ) : c_( comp, a ) {} - public: + public: ~reversible_ptr_container() - { + { remove_all(); } - + template< class PtrContainer > - void operator=( std::auto_ptr<PtrContainer> clone ) + void operator=( std::auto_ptr<PtrContainer> clone ) { swap( *clone ); } public: - - allocator_type get_allocator() const + + allocator_type get_allocator() const { - return c_.get_allocator(); + return c_.get_allocator(); } - + public: // container requirements iterator begin() { return iterator( c_.begin() ); } const_iterator begin() const { return const_iterator( c_.begin() ); } iterator end() { return iterator( c_.end() ); } const_iterator end() const { return const_iterator( c_.end() ); } - reverse_iterator rbegin() { return reverse_iterator( c_.rbegin() ); } - const_reverse_iterator rbegin() const { return const_reverse_iterator( c_.rbegin() ); } - reverse_iterator rend() { return reverse_iterator( c_.rend() ); } - const_reverse_iterator rend() const { return const_reverse_iterator( c_.rend() ); } - + reverse_iterator rbegin() { return reverse_iterator( c_.rbegin() ); } + const_reverse_iterator rbegin() const { return const_reverse_iterator( c_.rbegin() ); } + reverse_iterator rend() { return reverse_iterator( c_.rend() ); } + const_reverse_iterator rend() const { return const_reverse_iterator( c_.rend() ); } + void swap( reversible_ptr_container& r ) // notrow - { + { c_.swap( r.c_ ); } - + size_type size() const // nothrow { return c_.size(); @@ -385,9 +390,9 @@ size_type max_size() const // nothrow { - return c_.max_size(); + return c_.max_size(); } - + bool empty() const // nothrow { return c_.empty(); @@ -396,7 +401,7 @@ public: // optional container requirements bool operator==( const reversible_ptr_container& r ) const // nothrow - { + { if( size() != r.size() ) return false; else @@ -407,23 +412,23 @@ { return !(*this == r); } - - bool operator<( const reversible_ptr_container& r ) const // nothrow + + bool operator<( const reversible_ptr_container& r ) const // nothrow { return std::lexicographical_compare( begin(), end(), r.begin(), r.end() ); } - bool operator<=( const reversible_ptr_container& r ) const // nothrow + bool operator<=( const reversible_ptr_container& r ) const // nothrow { return !(r < *this); } - bool operator>( const reversible_ptr_container& r ) const // nothrow + bool operator>( const reversible_ptr_container& r ) const // nothrow { return r < *this; } - bool operator>=( const reversible_ptr_container& r ) const // nothrow + bool operator>=( const reversible_ptr_container& r ) const // nothrow { return !(*this < r); } @@ -440,20 +445,20 @@ return res; } - iterator erase( iterator x ) // nothrow - { + iterator erase( iterator x ) // nothrow + { BOOST_ASSERT( !empty() ); BOOST_ASSERT( x != end() ); - - remove( x ); + + remove( x ); return iterator( c_.erase( x.base() ) ); } - - iterator erase( iterator first, iterator last ) // nothrow + + iterator erase( iterator first, iterator last ) // nothrow { BOOST_ASSERT( !empty() ); - remove( first, last ); - return iterator( c_.erase( first.base(), + remove( first, last ); + return iterator( c_.erase( first.base(), last.base() ) ); } @@ -462,66 +467,66 @@ { return erase( adl_begin(r), adl_end(r) ); } - - void clear() - { - remove_all(); + + void clear() + { + remove_all(); c_.clear(); } - + public: // access interface - + auto_type release( iterator where ) - { + { BOOST_ASSERT( where != end() ); if( empty() ) - throw bad_ptr_container_operation( "'release()' on empty container" ); - + throw bad_ptr_container_operation( "'release()' on empty container" ); + auto_type ptr( Config::get_pointer( where ) ); // nothrow c_.erase( where.base() ); // nothrow - return boost::ptr_container_detail::move( ptr ); + return boost::ptr_container_detail::move( ptr ); } - auto_type replace( iterator where, Ty_* x ) // strong - { + auto_type replace( iterator where, Ty_* x ) // strong + { BOOST_ASSERT( where != end() ); enforce_null_policy( x, "Null pointer in 'replace()'" ); - + auto_type ptr( x ); - + if( empty() ) throw bad_ptr_container_operation( "'replace()' on empty container" ); auto_type old( Config::get_pointer( where ) ); // nothrow - + //#if defined( __GNUC__ ) || defined( __MWERKS__ ) || defined( __COMO__ ) - const_cast<void*&>(*where.base()) = ptr.release(); + const_cast<void*&>(*where.base()) = ptr.release(); //#else // *where.base() = ptr.release(); // nothrow, commit -//#endif +//#endif return boost::ptr_container_detail::move( old ); } auto_type replace( size_type idx, Ty_* x ) // strong { enforce_null_policy( x, "Null pointer in 'replace()'" ); - - auto_type ptr( x ); - - if( idx >= size() ) + + auto_type ptr( x ); + + if( idx >= size() ) throw bad_index( "'replace()' out of bounds" ); - + auto_type old( static_cast<Ty_*>( c_[idx] ) ); // nothrow c_[idx] = ptr.release(); // nothrow, commit return boost::ptr_container_detail::move( old ); - } - + } + }; // 'reversible_ptr_container' - + // - // two-phase lookup of template functions + // two-phase lookup of template functions // is buggy on most compilers, so we use a macro instead // #define BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type ) \ @@ -541,7 +546,10 @@ return ptr; \ } \ \ - using base_type::release; \ + auto_type release(iterator where) \ + { \ + return base_type::release(where); \ + } \ \ std::auto_ptr<PC> clone() const \ { \ @@ -556,16 +564,16 @@ PC( const allocator_type& a = allocator_type() ) : base_type(a) {} \ template< class InputIterator > \ PC( InputIterator first, InputIterator last, \ - const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {} - + const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {} + + - #define BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( PC, base_type ) \ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type ) - + } // namespace 'ptr_container_detail' -} // namespace 'boost' +} // namespace 'boost' #endif Index: boost/ptr_container/ptr_array.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_array.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_array.hpp --- boost/ptr_container/ptr_array.hpp 1 May 2005 22:27:36 -0000 1.3 +++ boost/ptr_container/ptr_array.hpp 11 May 2005 08:34:52 -0000 @@ -27,7 +27,7 @@ { template < - class T, + class T, size_t N, class Allocator = int // dummy > @@ -35,32 +35,32 @@ { public: typedef Allocator allocator_type; - - ptr_array_impl( Allocator a = Allocator() ) + + ptr_array_impl( Allocator a = Allocator() ) { - this->assign( 0 ); + this->assign( 0 ); } - + ptr_array_impl( size_t, T*, Allocator a = Allocator() ) { this->assing( 0 ); } }; } - + template - < - class T, - size_t N, + < + class T, + size_t N, class CloneAllocator = heap_clone_allocator > - class ptr_array : public - ptr_sequence_adapter< T, + class ptr_array : public + ptr_sequence_adapter< T, ptr_container_detail::ptr_array_impl<void*,N>, CloneAllocator > - { + { private: - typedef ptr_sequence_adapter< T, + typedef ptr_sequence_adapter< T, ptr_container_detail::ptr_array_impl<void*,N>, CloneAllocator > base_class; @@ -69,36 +69,36 @@ ptr_array( const ptr_array& ); void operator=( const ptr_array& ); - + public: typedef U* value_type; typedef U* pointer; typedef U& reference; typedef const U& const_reference; - typedef BOOST_DEDUCED_TYPENAME base_class::auto_type + typedef BOOST_DEDUCED_TYPENAME base_class::auto_type auto_type; - + public: // constructors ptr_array() : base_class() { } - - ptr_array( std::auto_ptr<ptr_array> r ) - : base_class( r ) { } - void operator=( std::auto_ptr<ptr_array> r ) + ptr_array( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) + : base_class( r ) { } + + void operator=( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) { base_class::operator=(r); } - - std::auto_ptr<ptr_array> release() - { - std::auto_ptr<ptr_array> ptr( new ptr_array ); - this->swap( *ptr ); - return ptr; - } - - std::auto_ptr<ptr_array> clone() const - { + + std::auto_ptr<ptr_array<T,N,CloneAllocator> > release() + { + std::auto_ptr<ptr_array> ptr( new ptr_array ); + this->swap( *ptr ); + return ptr; + } + + std::auto_ptr<ptr_array<T,N,CloneAllocator> > clone() const + { std::auto_ptr<ptr_array> pa( new ptr_array ); for( size_t i = 0; i != N; ++i ) { @@ -107,7 +107,7 @@ } return pa; } - + private: // hide some members using base_class::insert; using base_class::erase; @@ -117,7 +117,7 @@ using base_class::pop_back; using base_class::transfer; using base_class::get_allocator; - + public: // compile-time interface template< size_t idx > @@ -126,7 +126,7 @@ BOOST_STATIC_ASSERT( idx < N ); this->enforce_null_policy( r, "Null pointer in 'ptr_array::replace()'" ); - + auto_type res( static_cast<U*>( this->c_private()[idx] ) ); // nothrow this->c_private()[idx] = r; // nothrow return move(res); // nothrow @@ -152,21 +152,21 @@ T& at() { BOOST_STATIC_ASSERT( idx < N ); - return (*this)[idx]; + return (*this)[idx]; } template< size_t idx > const T& at() const { BOOST_STATIC_ASSERT( idx < N ); - return (*this)[idx]; + return (*this)[idx]; } bool is_null( size_t idx ) const { return base_class::is_null(idx); } - + template< size_t idx > bool is_null() const { Index: boost/ptr_container/ptr_deque.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_deque.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_deque.hpp --- boost/ptr_container/ptr_deque.hpp 10 May 2005 21:22:22 -0000 1.3 +++ boost/ptr_container/ptr_deque.hpp 11 May 2005 09:03:50 -0000 @@ -21,36 +21,40 @@ namespace boost { - + template - < - class T, + < + class T, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator<void*> > - class ptr_deque : public + class ptr_deque : public ptr_sequence_adapter< T, - std::deque<void*,Allocator>, + std::deque<void*,Allocator>, CloneAllocator > { typedef ptr_sequence_adapter< T, - std::deque<void*,Allocator>, + std::deque<void*,Allocator>, CloneAllocator > base_class; + public: -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque<T,CloneAllocator,Allocator>, - base_class ); -#else - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque, + typedef BOOST_DEDUCED_TYPENAME base_class::auto_type auto_type; + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_deque<T,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type, + base_class ); +#else + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque, base_class ); #endif }; ////////////////////////////////////////////////////////////////////////////// // clonability - + template< typename T, typename CA, typename A > inline ptr_deque<T,CA,A>* new_clone( const ptr_deque<T,CA,A>& r ) { Index: boost/ptr_container/ptr_list.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_list.hpp,v retrieving revision 1.5 diff -u -r1.5 ptr_list.hpp --- boost/ptr_container/ptr_list.hpp 10 May 2005 21:22:22 -0000 1.5 +++ boost/ptr_container/ptr_list.hpp 11 May 2005 08:41:03 -0000 @@ -23,31 +23,32 @@ { template - < - class T, + < + class T, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator<void*> > - class ptr_list : public - ptr_sequence_adapter< T, - std::list<void*,Allocator>, + class ptr_list : public + ptr_sequence_adapter< T, + std::list<void*,Allocator>, CloneAllocator > { - typedef ptr_sequence_adapter< T, - std::list<void*,Allocator>, + typedef ptr_sequence_adapter< T, + std::list<void*,Allocator>, CloneAllocator > base_class; - + public: -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list<T,CloneAllocator,Allocator>, +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_list<T,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type, base_class ); -#else +#else - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list, + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list, base_class ); #endif - + public: void unique( iterator first, iterator last ) { @@ -72,25 +73,25 @@ } using base_class::merge; - - void merge( ptr_list& x ) + + void merge( ptr_list& x ) { merge( x, std::less<T>() ); } - template< typename Compare > - void merge( ptr_list& x, Compare comp ) + template< typename Compare > + void merge( ptr_list& x, Compare comp ) { this->c_private().merge( x.c_private(), void_ptr_indirect_fun<Compare,T>( comp ) ); } - void sort() - { - sort( std::less<T>() ); + void sort() + { + sort( std::less<T>() ); }; - template< typename Compare > - void sort( Compare comp ) + template< typename Compare > + void sort( Compare comp ) { this->c_private().sort( void_ptr_indirect_fun<Compare,T>( comp ) ); } @@ -105,7 +106,7 @@ { return r.clone().release(); } - + ///////////////////////////////////////////////////////////////////////// // swap Index: boost/ptr_container/ptr_map.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_map.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_map.hpp --- boost/ptr_container/ptr_map.hpp 10 May 2005 21:22:22 -0000 1.3 +++ boost/ptr_container/ptr_map.hpp 11 May 2005 08:39:06 -0000 @@ -21,75 +21,77 @@ namespace boost { - + template - < - class Key, - class T, + < + class Key, + class T, class Compare = std::less<Key>, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator< std::pair<const Key,void*> > > - class ptr_map : + class ptr_map : public ptr_map_adapter<T,std::map<Key,void*,Compare,Allocator>,CloneAllocator> { typedef ptr_map_adapter<T,std::map<Key,void*,Compare,Allocator>,CloneAllocator> base_type; - + public: explicit ptr_map( const Compare& comp = Compare(), - const Allocator& a = Allocator() ) + const Allocator& a = Allocator() ) : base_type( comp, a ) { } template< class InputIterator > - ptr_map( InputIterator first, InputIterator last, + ptr_map( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& a = Allocator() ) - : base_type( first, last, comp, a ) + : base_type( first, last, comp, a ) { } - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map<Key,T,Compare,CloneAllocator,Allocator>, + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_map<Key,T,Compare,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type, base_type ); -#else +#else BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map, base_type ); -#endif +#endif }; - + template - < - class Key, - class T, - class Compare = std::less<Key>, + < + class Key, + class T, + class Compare = std::less<Key>, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator< std::pair<const Key,void*> > > - class ptr_multimap : + class ptr_multimap : public ptr_multimap_adapter<T,std::multimap<Key,void*,Compare,Allocator>,CloneAllocator> { typedef ptr_multimap_adapter<T,std::multimap<Key,void*,Compare,Allocator>,CloneAllocator> base_type; - + public: explicit ptr_multimap( const Compare& comp = Compare(), - const Allocator& a = Allocator() ) + const Allocator& a = Allocator() ) : base_type( comp, a ) { } - + template< class InputIterator > ptr_multimap( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& a = Allocator() ) - : base_type( first, last, comp, a ) + : base_type( first, last, comp, a ) { } -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap<Key,T,Compare,CloneAllocator,Allocator>, +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_multimap<Key,T,Compare,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type, base_type ); -#else +#else - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap, + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap, base_type ); #endif }; Index: boost/ptr_container/ptr_map_adapter.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_map_adapter.hpp,v retrieving revision 1.9 diff -u -r1.9 ptr_map_adapter.hpp --- boost/ptr_container/ptr_map_adapter.hpp 10 May 2005 21:22:22 -0000 1.9 +++ boost/ptr_container/ptr_map_adapter.hpp 11 May 2005 08:36:11 -0000 @@ -27,7 +27,7 @@ { template - < + < class T, class VoidPtrMap > @@ -35,32 +35,32 @@ { typedef BOOST_DEDUCED_TYPENAME remove_nullable<T>::type U; - typedef VoidPtrMap + typedef VoidPtrMap void_container_type; - + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type allocator_type; - + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare key_compare; - + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::value_compare value_compare; - + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type key_type; - + typedef U value_type; - typedef ptr_map_iterator< + typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::iterator, BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, value_type> iterator; - + typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::const_iterator, - BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, + BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, const value_type> const_iterator; @@ -73,7 +73,7 @@ typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::const_reverse_iterator, - BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, + BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, const value_type> const_reverse_iterator; @@ -94,23 +94,23 @@ BOOST_STATIC_CONSTANT( bool, allow_null = boost::is_nullable<T>::value ); }; - - + + template - < + < class T, - class VoidPtrMap, + class VoidPtrMap, class CloneAllocator > - class ptr_map_adapter_base : + class ptr_map_adapter_base : public ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>, CloneAllocator > { typedef ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>, - CloneAllocator > + CloneAllocator > base_type; - + public: typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator @@ -131,7 +131,7 @@ ->find( key ); if( i != const_cast<ptr_map_adapter_base*>(this)->end() ) return *i; - else + else throw bad_ptr_container_operation( "'ptr_map/multimap::at()' could" " not find key" ); } @@ -144,16 +144,16 @@ VoidPtrMap* m_; const key_type& key_; - eraser( VoidPtrMap* m, const key_type& key ) + eraser( VoidPtrMap* m, const key_type& key ) : released_(false), m_(m), key_(key) {} - - ~eraser() + + ~eraser() { if( !released_ ) m_->erase(key_); } - + void release() { released_ = true; } }; @@ -166,106 +166,107 @@ else { eraser e(&this->c_private(),key); // nothrow - value_type res = new T(); // strong + value_type res = new T(); // strong ref = res; // nothrow e.release(); // nothrow return *res; } } - + public: -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>, +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( this_type, base_type ); -#else - BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base, +#else + BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base, base_type ); #endif template< class Compare, class Allocator > explicit ptr_map_adapter_base( const Compare& comp, - const Allocator& a ) - : base_type( comp, a ) + const Allocator& a ) + : base_type( comp, a ) { } template< class PtrContainer > - ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone ) + ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone ) : base_type( clone ) { } - + template< typename PtrContainer > - void operator=( std::auto_ptr<PtrContainer> clone ) + void operator=( std::auto_ptr<PtrContainer> clone ) { base_type::operator=( clone ); - } + } + + iterator find( const key_type& x ) + { + return iterator( this->c_private().find( x ) ); + } + + const_iterator find( const key_type& x ) const + { + return const_iterator( this->c_private().find( x ) ); + } + + size_type count( const key_type& x ) const + { + return this->c_private().count( x ); + } + + iterator lower_bound( const key_type& x ) + { + return iterator( this->c_private().lower_bound( x ) ); + } + + const_iterator lower_bound( const key_type& x ) const + { + return const_iterator( this->c_private().lower_bound( x ) ); + } + + iterator upper_bound( const key_type& x ) + { + return iterator( this->c_private().upper_bound( x ) ); + } - iterator find( const key_type& x ) - { - return iterator( this->c_private().find( x ) ); - } - - const_iterator find( const key_type& x ) const - { - return const_iterator( this->c_private().find( x ) ); - } - - size_type count( const key_type& x ) const - { - return this->c_private().count( x ); - } - - iterator lower_bound( const key_type& x ) - { - return iterator( this->c_private().lower_bound( x ) ); - } - - const_iterator lower_bound( const key_type& x ) const - { - return const_iterator( this->c_private().lower_bound( x ) ); - } - - iterator upper_bound( const key_type& x ) - { - return iterator( this->c_private().upper_bound( x ) ); - } - - const_iterator upper_bound( const key_type& x ) const - { - return const_iterator( this->c_private().upper_bound( x ) ); - } - - iterator_range<iterator> equal_range( const key_type& x ) - { + const_iterator upper_bound( const key_type& x ) const + { + return const_iterator( this->c_private().upper_bound( x ) ); + } + + iterator_range<iterator> equal_range( const key_type& x ) + { std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator, BOOST_DEDUCED_TYPENAME base_type::ptr_iterator> - p = this->c_private().equal_range( x ); - return make_iterator_range( iterator( p.first ), iterator( p.second ) ); - } - - iterator_range<const_iterator> equal_range( const key_type& x ) const - { + p = this->c_private().equal_range( x ); + return make_iterator_range( iterator( p.first ), iterator( p.second ) ); + } + + iterator_range<const_iterator> equal_range( const key_type& x ) const + { std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator, - BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator> - p = this->c_private().equal_range( x ); - return make_iterator_range( const_iterator( p.first ), const_iterator( p.second ) ); - } - - reference at( const key_type& key ) - { - return lookup( key ); - } - - const_reference at( const key_type& key ) const - { + BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator> + p = this->c_private().equal_range( x ); + return make_iterator_range( const_iterator( p.first ), const_iterator( p.second ) ); + } + + reference at( const key_type& key ) + { return lookup( key ); } - reference operator[]( const key_type& key ) - { + const_reference at( const key_type& key ) const + { + return lookup( key ); + } + + reference operator[]( const key_type& key ) + { return insert_lookup( key ); - } + } - auto_type replace( iterator where, value_type x ) // strong - { + auto_type replace( iterator where, value_type x ) // strong + { BOOST_ASSERT( where != this->end() ); this->enforce_null_policy( x, "Null pointer in 'replace()'" ); @@ -279,30 +280,30 @@ where.base()->second = ptr.release(); // nothrow, commit return move( old ); } - + }; - + } // ptr_container_detail ///////////////////////////////////////////////////////////////////////// // ptr_map_adapter ///////////////////////////////////////////////////////////////////////// - + template - < + < class T, - class VoidPtrMap, + class VoidPtrMap, class CloneAllocator = heap_clone_allocator > - class ptr_map_adapter : + class ptr_map_adapter : public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> { - typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> + typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> base_type; - - public: - typedef BOOST_DEDUCED_TYPENAME base_type::iterator - iterator; + + public: + typedef BOOST_DEDUCED_TYPENAME base_type::iterator + iterator; typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator const_iterator; typedef BOOST_DEDUCED_TYPENAME base_type::object_type @@ -315,9 +316,9 @@ const_reference; typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type; - typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare key_compare; - typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type + typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type allocator_type; typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type; @@ -326,41 +327,41 @@ void safe_insert( const key_type& key, auto_type ptr ) // strong { std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool> - res = - this->c_private().insert( std::make_pair( key, ptr.get() ) ); // strong, commit - if( res.second ) // nothrow + res = + this->c_private().insert( std::make_pair( key, ptr.get() ) ); // strong, commit + if( res.second ) // nothrow ptr.release(); // nothrow } - - template< class II > - void map_basic_clone_and_insert( II first, II last ) - { - while( first != last ) - { + + template< class II > + void map_basic_clone_and_insert( II first, II last ) + { + while( first != last ) + { if( this->find( first.key() ) == this->end() ) { - const object_type& p = *first.base(); // nothrow + const object_type& p = *first.base(); // nothrow auto_type ptr( this->null_policy_allocate_clone( - static_cast<value_type>(p.second) ) ); - // strong + static_cast<value_type>(p.second) ) ); + // strong this->safe_insert( p.first, ptr_container_detail:: move( ptr ) );// strong, commit } - ++first; - } + ++first; + } } - + public: explicit ptr_map_adapter( const key_compare& comp = key_compare(), - const allocator_type& a = allocator_type() ) + const allocator_type& a = allocator_type() ) : base_type( comp, a ) { } - + template< class InputIterator > - ptr_map_adapter( InputIterator first, InputIterator last, + ptr_map_adapter( InputIterator first, InputIterator last, const key_compare& comp = key_compare(), const allocator_type& a = allocator_type() ) - : base_type( comp, a ) + : base_type( comp, a ) { map_basic_clone_and_insert( first, last ); } @@ -371,7 +372,7 @@ template< class U > void operator=( std::auto_ptr<U> r ) - { + { base_type::operator=( r ); } @@ -393,29 +394,29 @@ { this->enforce_null_policy( x, "Null pointer in ptr_map_adapter::insert()" ); auto_type ptr( x ); // nothrow - + std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool> - res = this->c_private().insert( std::make_pair( key, x ) ); // strong, commit - if( res.second ) // nothrow + res = this->c_private().insert( std::make_pair( key, x ) ); // strong, commit + if( res.second ) // nothrow ptr.release(); // nothrow - return std::make_pair( iterator( res.first ), res.second ); // nothrow + return std::make_pair( iterator( res.first ), res.second ); // nothrow } - bool transfer( iterator object, + bool transfer( iterator object, ptr_map_adapter& from ) // strong { return this->single_transfer( object, from ); } - size_type transfer( iterator first, - iterator last, + size_type transfer( iterator first, + iterator last, ptr_map_adapter& from ) // basic { return this->single_transfer( first, last, from ); } #ifdef BOOST_NO_SFINAE -#else +#else template< class Range > BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range, @@ -425,39 +426,39 @@ { return transfer( this->adl_begin(r), this->adl_end(r), from ); } - + #endif size_type transfer( ptr_map_adapter& from ) // basic { return transfer( from.begin(), from.end(), from ); } - + }; - + ///////////////////////////////////////////////////////////////////////// // ptr_multimap_adapter ///////////////////////////////////////////////////////////////////////// template - < + < class T, - class VoidPtrMultiMap, + class VoidPtrMultiMap, class CloneAllocator = heap_clone_allocator > - class ptr_multimap_adapter : + class ptr_multimap_adapter : public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator> { typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator> base_type; - + public: // typedefs - typedef BOOST_DEDUCED_TYPENAME base_type::iterator - iterator; - typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator - const_iterator; + typedef BOOST_DEDUCED_TYPENAME base_type::iterator + iterator; + typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator + const_iterator; typedef BOOST_DEDUCED_TYPENAME base_type::object_type - object_type; + object_type; typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type; typedef BOOST_DEDUCED_TYPENAME base_type::key_type @@ -467,41 +468,41 @@ typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type; typedef BOOST_DEDUCED_TYPENAME base_type::auto_type - auto_type; - typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare + auto_type; + typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare key_compare; - typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type + typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type allocator_type; private: void safe_insert( const key_type& key, auto_type ptr ) // strong { - this->c_private().insert( - std::make_pair( key, ptr.get() ) ); // strong, commit + this->c_private().insert( + std::make_pair( key, ptr.get() ) ); // strong, commit ptr.release(); // nothrow } - - template< typename II > - void map_basic_clone_and_insert( II first, II last ) - { - while( first != last ) - { - const object_type& pair = *first.base(); // nothrow + + template< typename II > + void map_basic_clone_and_insert( II first, II last ) + { + while( first != last ) + { + const object_type& pair = *first.base(); // nothrow auto_type ptr( this->null_policy_allocate_clone( - static_cast<value_type>( pair.second ) ) ); + static_cast<value_type>( pair.second ) ) ); // strong safe_insert( pair.first, ptr_container_detail:: move( ptr ) ); // strong, commit - ++first; - } + ++first; + } } - + public: - + explicit ptr_multimap_adapter( const key_compare& comp = key_compare(), const allocator_type& a = allocator_type() ) : base_type( comp, a ) { } - + template< class InputIterator > ptr_multimap_adapter( InputIterator first, InputIterator last, const key_compare& comp = key_compare(), @@ -517,12 +518,12 @@ template< class U > void operator=( std::auto_ptr<U> r ) - { + { base_type::operator=( r ); } using base_type::release; - + template< typename InputIterator > void insert( InputIterator first, InputIterator last ) // basic { @@ -542,27 +543,27 @@ auto_type ptr( x ); // nothrow BOOST_DEDUCED_TYPENAME base_type::ptr_iterator res = this->c_private().insert( std::make_pair( key, x ) ); - // strong, commit + // strong, commit ptr.release(); // notrow - return iterator( res ); + return iterator( res ); } - - void transfer( iterator object, + + void transfer( iterator object, ptr_multimap_adapter& from ) // strong { this->multi_transfer( object, from ); } - size_type transfer( iterator first, - iterator last, + size_type transfer( iterator first, + iterator last, ptr_multimap_adapter& from ) // basic { return this->multi_transfer( first, last, from ); } #ifdef BOOST_NO_SFINAE -#else +#else template< class Range > BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range, @@ -573,7 +574,7 @@ return transfer( this->adl_begin(r), this->adl_end(r), from ); } -#endif +#endif void transfer( ptr_multimap_adapter& from ) // basic { @@ -587,7 +588,7 @@ { return i.base()->second == 0; } - -} // namespace 'boost' + +} // namespace 'boost' #endif Index: boost/ptr_container/ptr_sequence_adapter.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_sequence_adapter.hpp,v retrieving revision 1.16 diff -u -r1.16 ptr_sequence_adapter.hpp --- boost/ptr_container/ptr_sequence_adapter.hpp 10 May 2005 21:22:22 -0000 1.16 +++ boost/ptr_container/ptr_sequence_adapter.hpp 11 May 2005 09:06:12 -0000 @@ -29,13 +29,13 @@ #include <iostream> namespace boost -{ +{ namespace ptr_container_detail { - + template - < - class T, + < + class T, class VoidPtrSeq > struct sequence_config @@ -47,26 +47,26 @@ typedef BOOST_DEDUCED_TYPENAME VoidPtrSeq::allocator_type allocator_type; - + typedef U value_type; typedef void_ptr_iterator< - BOOST_DEDUCED_TYPENAME VoidPtrSeq::iterator, U > + BOOST_DEDUCED_TYPENAME VoidPtrSeq::iterator, U > iterator; - + typedef void_ptr_iterator< BOOST_DEDUCED_TYPENAME VoidPtrSeq::const_iterator, const U > const_iterator; - + typedef void_ptr_iterator< BOOST_DEDUCED_TYPENAME VoidPtrSeq::reverse_iterator, U > reverse_iterator; - + typedef void_ptr_iterator< BOOST_DEDUCED_TYPENAME VoidPtrSeq::const_reverse_iterator, const U > const_reverse_iterator; - - typedef value_type + + typedef value_type object_type; #ifdef BOOST_NO_SFINAE @@ -76,7 +76,7 @@ { return static_cast<U*>( *i.base() ); } - + #else template< class Iter > static U* get_pointer( void_ptr_iterator<Iter,U> i ) @@ -89,7 +89,7 @@ { return &*i; } -#endif +#endif #ifdef BOOST_NO_SFINAE @@ -98,7 +98,7 @@ { return static_cast<const U*>( *i.base() ); } - + #else // BOOST_NO_SFINAE #if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) @@ -107,7 +107,7 @@ { return static_cast<const U*>( *i.base() ); } -#else +#else template< class Iter > static const U* get_const_pointer( void_ptr_iterator<Iter,const U> i ) { @@ -124,7 +124,7 @@ BOOST_STATIC_CONSTANT(bool, allow_null = boost::is_nullable<T>::value ); }; - + } // ptr_container_detail @@ -135,43 +135,44 @@ } - + template - < + < class T, - class VoidPtrSeq, + class VoidPtrSeq, class CloneAllocator = heap_clone_allocator > - class ptr_sequence_adapter : public - ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>, + class ptr_sequence_adapter : public + ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>, CloneAllocator > { typedef ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>, CloneAllocator > base_type; - + typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter scoped_deleter; - + public: - typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type; - typedef BOOST_DEDUCED_TYPENAME base_type::reference reference; - typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type; - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator>, + typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type; + typedef BOOST_DEDUCED_TYPENAME base_type::reference reference; + typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type; + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( this_type, base_type ) #else - BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter, + BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter, base_type ) -#endif - +#endif + template< class PtrContainer > ptr_sequence_adapter( std::auto_ptr<PtrContainer> clone ) : base_type( clone ) { } template< class PtrContainer > - void operator=( std::auto_ptr<PtrContainer> clone ) + void operator=( std::auto_ptr<PtrContainer> clone ) { base_type::operator=( clone ); } @@ -180,7 +181,7 @@ // modifiers ///////////////////////////////////////////////////////////// - void push_back( value_type x ) // strong + void push_back( value_type x ) // strong { this->enforce_null_policy( x, "Null pointer in 'push_back()'" ); @@ -189,21 +190,21 @@ ptr.release(); // nothrow } - void push_front( value_type x ) + void push_front( value_type x ) { this->enforce_null_policy( x, "Null pointer in 'push_front()'" ); auto_type ptr( x ); // nothrow this->c_private().push_front( x ); // strong, commit ptr.release(); // nothrow - } + } auto_type pop_back() { - if( this->empty() ) + if( this->empty() ) throw bad_ptr_container_operation( "'pop_back()' " " on empty container" ); - auto_type ptr( static_cast<value_type>( + auto_type ptr( static_cast<value_type>( this->c_private().back() ) ); // nothrow this->c_private().pop_back(); // nothrow return ptr_container_detail::move( ptr ); // nothrow @@ -211,28 +212,28 @@ auto_type pop_front() { - if( this->empty() ) - throw bad_ptr_container_operation( "'pop_front()' on" - " empty container" ); - auto_type ptr( this->c_private().front() ); // nothrow + if( this->empty() ) + throw bad_ptr_container_operation( "'pop_front()' on" + " empty container" ); + auto_type ptr( this->c_private().front() ); // nothrow this->c_private().pop_front(); // nothrow - return ptr_container_detail::move( ptr ); + return ptr_container_detail::move( ptr ); } - - reference front() - { + + reference front() + { BOOST_ASSERT( !::boost::is_null( this->begin() ) ); if( this->empty() ) throw bad_ptr_container_operation( "accessing 'front()' on empty container" ); - return *this->begin(); + return *this->begin(); } - const_reference front() const + const_reference front() const { BOOST_ASSERT( !::boost::is_null( this->begin() ) ); if( this->empty() ) throw bad_ptr_container_operation( "accessing 'front()' on empty container" ); - return *this->begin(); + return *this->begin(); } reference back() @@ -240,7 +241,7 @@ BOOST_ASSERT( !::boost::is_null( --this->end() ) ); if( this->empty() ) throw bad_ptr_container_operation( "accessing 'back()' on empty container" ); - return *--this->end(); + return *--this->end(); } const_reference back() const @@ -248,25 +249,25 @@ BOOST_ASSERT( !::boost::is_null( --this->end() ) ); if( this->empty() ) throw bad_ptr_container_operation( "accessing 'back()' on empty container" ); - return *--this->end(); + return *--this->end(); } public: // deque/vector inerface - - reference operator[]( size_type n ) // nothrow + + reference operator[]( size_type n ) // nothrow { BOOST_ASSERT( n < this->size() ); BOOST_ASSERT( !this->is_null( n ) ); - return *static_cast<value_type>( this->c_private()[n] ); + return *static_cast<value_type>( this->c_private()[n] ); } - - const_reference operator[]( size_type n ) const // nothrow - { - BOOST_ASSERT( n < this->size() ); + + const_reference operator[]( size_type n ) const // nothrow + { + BOOST_ASSERT( n < this->size() ); BOOST_ASSERT( !this->is_null( n ) ); return *static_cast<value_type>( this->c_private()[n] ); } - + reference at( size_type n ) { if( n >= this->size() ) @@ -274,30 +275,30 @@ BOOST_ASSERT( !this->is_null( n ) ); return (*this)[n]; } - + const_reference at( size_type n ) const { if( n >= this->size() ) throw bad_index( "'at()' out of bounds" ); BOOST_ASSERT( !this->is_null( n ) ); - return (*this)[n]; + return (*this)[n]; } - + public: // vector interface - + size_type capacity() const { return this->c_private().capacity(); } - + void reserve( size_type n ) { - this->c_private().reserve( n ); + this->c_private().reserve( n ); } void reverse() { - this->c_private().reverse(); + this->c_private().reverse(); } public: // assign, insert, transfer @@ -305,7 +306,7 @@ // overhead: 1 heap allocation (very cheap compared to cloning) template< class InputIterator > void assign( InputIterator first, InputIterator last ) // strong - { + { base_type temp( first, last ); this->swap( temp ); } @@ -327,22 +328,27 @@ template< class I > void insert_impl( iterator before, I first, I last, std::forward_iterator_tag ) // strong { - if( first == last ) + if( first == last ) return; scoped_deleter sd( first, last ); // strong - this->insert_clones_and_release( sd, before ); // strong, commit + this->insert_clones_and_release( sd, before ); // strong, commit } public: using base_type::insert; - + template< class InputIterator > void insert( iterator before, InputIterator first, InputIterator last ) // strong { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + insert_impl( before, first, last, + iterator_category<InputIterator>::type() ); +#else insert_impl( before, first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); - } +#endif + } #ifdef BOOST_NO_SFINAE #else @@ -356,23 +362,23 @@ #endif - void transfer( iterator before, - iterator first, - iterator last, + void transfer( iterator before, + iterator first, + iterator last, ptr_sequence_adapter& from ) // strong { BOOST_ASSERT( &from != this ); if( from.empty() ) return; this->c_private(). - insert( before.base(), + insert( before.base(), first.base(), last.base() ); // strong from.c_private().erase( first.base(), last.base() ); // nothrow } - void transfer( iterator before, - iterator object, + void transfer( iterator before, + iterator object, ptr_sequence_adapter& from ) // strong { BOOST_ASSERT( &from != this ); @@ -386,7 +392,7 @@ #ifdef BOOST_NO_SFINAE #else - + template< class Range > BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range, iterator > >::type @@ -396,7 +402,7 @@ } #endif - + void transfer( iterator before, ptr_sequence_adapter& from ) // strong { BOOST_ASSERT( &from != this ); @@ -409,7 +415,7 @@ } public: // null functions - + bool is_null( size_type idx ) const { BOOST_ASSERT( idx < this->size() ); @@ -422,7 +428,7 @@ { sort( first, last, std::less<T>() ); } - + void sort() { sort( this->begin(), this->end() ); @@ -433,23 +439,23 @@ { BOOST_ASSERT( first <= last && "out of range sort()" ); BOOST_ASSERT( this->begin() <= first && "out of range sort()" ); - BOOST_ASSERT( last <= this->end() && "out of range sort()" ); + BOOST_ASSERT( last <= this->end() && "out of range sort()" ); // some static assert on the arguments of the comparison - std::sort( first.base(), last.base(), + std::sort( first.base(), last.base(), void_ptr_indirect_fun<Compare,T>(comp) ); } - + template< class Compare > void sort( Compare comp ) { sort( this->begin(), this->end(), comp ); } - + void unique( iterator first, iterator last ) { unique( first, last, std::equal_to<T>() ); } - + void unique() { unique( this->begin(), this->end() ); @@ -467,26 +473,26 @@ void compact_and_erase_nulls( iterator first, iterator last ) // nothrow { - - typename base_type::ptr_iterator p = std::stable_partition( - first.base(), - last.base(), + + typename base_type::ptr_iterator p = std::stable_partition( + first.base(), + last.base(), is_not_zero_ptr() ); this->c_private().erase( p, this->end().base() ); - + } - + public: - + template< class Compare > void unique( iterator first, iterator last, Compare comp ) { BOOST_ASSERT( first <= last && "out of range unique()" ); BOOST_ASSERT( this->begin() <= first && "out of range unique()" ); - BOOST_ASSERT( last <= this->end() && "out of range unique()" ); + BOOST_ASSERT( last <= this->end() && "out of range unique()" ); iterator prev = first; - iterator next = first + 1; + iterator next = first + 1; for( ; next != last; ++next ) { if( comp( *prev, *next ) ) @@ -503,7 +509,7 @@ compact_and_erase_nulls( first, last ); } - + template< class Compare > void unique( Compare comp ) { @@ -515,22 +521,22 @@ { BOOST_ASSERT( first <= last && "out of range unique()" ); BOOST_ASSERT( this->begin() <= first && "out of range unique()" ); - BOOST_ASSERT( last <= this->end() && "out of range unique()" ); + BOOST_ASSERT( last <= this->end() && "out of range unique()" ); - iterator next = first; + iterator next = first; for( ; next != last; ++next ) { if( pred( *next ) ) { this->remove( next ); // delete object *next.base() = 0; // mark pointer as deleted - std::cout << " deleting "; + std::cout << " deleting "; } } compact_and_erase_nulls( first, last ); } - + template< class Pred > void erase_if( Pred pred ) { @@ -538,43 +544,43 @@ } - void merge( iterator first, iterator last, + void merge( iterator first, iterator last, ptr_sequence_adapter& from ) { merge( first, last, from, std::less<T>() ); } - + template< class BinPred > - void merge( iterator first, iterator last, + void merge( iterator first, iterator last, ptr_sequence_adapter& from, BinPred pred ) { void_ptr_indirect_fun<BinPred,T> bin_pred(pred); - size_type current_size = this->size(); + size_type current_size = this->size(); this->transfer( this->end(), first, last, from ); typename base_type::ptr_iterator middle = this->begin().base(); - std::advance(middle,current_size); + std::advance(middle,current_size); std::inplace_merge( this->begin().base(), middle, this->end().base(), bin_pred ); } - + void merge( ptr_sequence_adapter& r ) { merge( r, std::less<T>() ); BOOST_ASSERT( r.empty() ); } - + template< class BinPred > void merge( ptr_sequence_adapter& r, BinPred pred ) { merge( r.begin(), r.end(), r, pred ); - BOOST_ASSERT( r.empty() ); + BOOST_ASSERT( r.empty() ); } }; -} // namespace 'boost' +} // namespace 'boost' #endif Index: boost/ptr_container/ptr_set.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_set.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_set.hpp --- boost/ptr_container/ptr_set.hpp 10 May 2005 21:22:23 -0000 1.3 +++ boost/ptr_container/ptr_set.hpp 11 May 2005 08:39:22 -0000 @@ -24,53 +24,54 @@ { template - < - class Key, + < + class Key, class Compare = std::less<Key>, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator<void*> > - class ptr_set : - public ptr_set_adapter< Key, + class ptr_set : + public ptr_set_adapter< Key, std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>, CloneAllocator > { typedef ptr_set_adapter< Key, std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>, CloneAllocator > base_type; - + public: explicit ptr_set( const Compare& comp = Compare(), - const Allocator& a = Allocator() ) - : base_type( comp, a ) + const Allocator& a = Allocator() ) + : base_type( comp, a ) { } - + template< typename InputIterator > - ptr_set( InputIterator first, InputIterator last, + ptr_set( InputIterator first, InputIterator last, const Compare& comp = Compare(), - const Allocator& a = Allocator() ) + const Allocator& a = Allocator() ) : base_type( first, last, comp, a ) { } -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set<Key,Compare,CloneAllocator,Allocator>, +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_set<Key,Compare,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type, base_type ); #else - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set, + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set, base_type ); -#endif +#endif }; - - - + + + template - < - class Key, + < + class Key, class Compare = std::less<Key>, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator<void*> > - class ptr_multiset : + class ptr_multiset : public ptr_multiset_adapter< Key, std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>, CloneAllocator > @@ -82,25 +83,26 @@ public: explicit ptr_multiset( const Compare& comp = Compare(), const Allocator& a = Allocator() ) - : base_type( comp, a ) + : base_type( comp, a ) { } - + template< typename InputIterator > ptr_multiset( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& a = Allocator() ) - : base_type( first, last, comp, a ) + : base_type( first, last, comp, a ) { } -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset<Key,Compare,CloneAllocator,Allocator>, +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_multiset<Key,Compare,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type, base_type ); #else - BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset, + BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset, base_type ); -#endif - +#endif + }; ///////////////////////////////////////////////////////////////////////// @@ -117,7 +119,7 @@ { return r.clone().release(); } - + ///////////////////////////////////////////////////////////////////////// // swap Index: boost/ptr_container/ptr_vector.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_vector.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_vector.hpp --- boost/ptr_container/ptr_vector.hpp 10 May 2005 21:22:23 -0000 1.3 +++ boost/ptr_container/ptr_vector.hpp 11 May 2005 09:03:56 -0000 @@ -23,29 +23,32 @@ { template - < - class T, + < + class T, class CloneAllocator = heap_clone_allocator, class Allocator = std::allocator<void*> > - class ptr_vector : public - ptr_sequence_adapter< T, - std::vector<void*,Allocator>, + class ptr_vector : public + ptr_sequence_adapter< T, + std::vector<void*,Allocator>, CloneAllocator > - { - typedef ptr_sequence_adapter< T, - std::vector<void*,Allocator>, - CloneAllocator > + { + typedef ptr_sequence_adapter< T, + std::vector<void*,Allocator>, + CloneAllocator > base_class; public: -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector<T,CloneAllocator,Allocator>, + typedef BOOST_DEDUCED_TYPENAME base_class::auto_type auto_type; + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef ptr_vector<T,CloneAllocator,Allocator> this_type; + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type, base_class ); -#else - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector, +#else + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector, base_class ); -#endif +#endif ptr_vector( BOOST_DEDUCED_TYPENAME base_class::size_type n, const allocator_type& alloc = allocator_type() ) @@ -74,7 +77,7 @@ { l.swap(r); } - + } #endif boost-test(RUN) "ptr_container/indirect_fun" : "libs\ptr_container\test\indirect_fun.cpp" boost-test(RUN) "ptr_container/tut1" : "libs\ptr_container\test\tut1.cpp" boost-test(RUN) "ptr_container/iterator_test" : "libs\ptr_container\test\iterator_test.cpp" boost-test(RUN) "ptr_container/view_example" : "libs\ptr_container\test\view_example.cpp" boost-test(RUN) "ptr_container/incomplete_type_test" : "libs\ptr_container\test\incomplete_type_test.cpp" boost-test(RUN) "ptr_container/tree_test" : "libs\ptr_container\test\tree_test.cpp" boost-test(RUN) "ptr_container/ptr_array" : "libs\ptr_container\test\ptr_array.cpp" boost-test(RUN) "ptr_container/ptr_map" : "libs\ptr_container\test\ptr_map.cpp" boost-test(RUN) "ptr_container/ptr_set" : "libs\ptr_container\test\ptr_set.cpp" boost-test(RUN) "ptr_container/ptr_deque" : "libs\ptr_container\test\ptr_deque.cpp" boost-test(RUN) "ptr_container/ptr_list" : "libs\ptr_container\test\ptr_list.cpp" boost-test(RUN) "ptr_container/ptr_vector" : "libs\ptr_container\test\ptr_vector.cpp" ...found 1088 targets... ...updating 60 targets... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.obj indirect_fun.cpp: Warning W8057 indirect_fun.cpp 76: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *) Warning W8057 indirect_fun.cpp 76: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *) borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.exe execute-test ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.run 1 file(s) copied. **passed** ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.test borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj tut1.cpp: Error E2034 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_deque.hpp 48: Cannot convert 'ptr_container_detail::static_move_ptr<animal,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<animal,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function ptr_deque<animal,heap_clone_allocator,_STL::allocator<void *> >::release(void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>) Error E2034 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/detail/reversible_ptr_container.hpp 487: Cannot convert 'move_ptrs::move_source<static_move_ptr<animal,clone_deleter<reversible_ptr_container<sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > > >' to 'static_move_ptr<animal,clone_deleter<reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' in function reversible_ptr_container<sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::release(void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>) Error E2451 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/detail/reversible_ptr_container.hpp 53: Undefined symbol 'deallocate_clone' in function operator void () <animal>(const animal *) const *** 3 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj" "tut1.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj... ...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.CMD for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.obj... ...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.exe for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.CMD... ...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.run for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.obj iterator_test.cpp: Warning W8057 iterator_test.cpp 36: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *) Warning W8057 iterator_test.cpp 36: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *) borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.exe execute-test ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.run 1 file(s) copied. **passed** ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.test borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj view_example.cpp: Warning W8091 view_example.cpp 157: template argument _RandomAccessIter passed to 'sort' is a output iterator: random iterator required in function main() Warning W8092 view_example.cpp 163: template argument Compare passed to 'sort' is not an iterator: random iterator required in function main() Warning W8092 view_example.cpp 165: template argument Compare passed to 'sort' is not an iterator: random iterator required in function main() Error E2294 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_sequence_adapter.hpp 99: Structure required on left side of . or .* in function const photon * get_const_pointer<photon *>(photon *) *** 1 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj" "view_example.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj... ...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.CMD for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.obj... ...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.exe for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.CMD... ...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.run for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj incomplete_type_test.cpp: Warning W8057 incomplete_type_test.cpp 181: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *) Warning W8057 incomplete_type_test.cpp 181: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *) Error E2247 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/clone_allocator.hpp 26: 'Composite::Composite(const Composite &)' is not accessible in function Composite * new_clone<Composite>(const Composite &) *** 1 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj" "incomplete_type_test.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj... ...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.CMD for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.obj... ...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.exe for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.CMD... ...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.run for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.obj tree_test.cpp: Warning W8057 tree_test.cpp 278: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *) Warning W8057 tree_test.cpp 278: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *) borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.exe execute-test ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.run 1 file(s) copied. **passed** ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.test borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj ptr_array.cpp: Error E2285 ptr_array.cpp 89: Could not find a match for 'ptr_array<int,10,heap_clone_allocator>::at<idx>(int)' in function test_array() Error E2451 ptr_array.cpp 89: Undefined symbol 'ex' in function test_array() Error E2285 ptr_array.cpp 90: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_array() Error E2285 ptr_array.cpp 91: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_array() Warning W8057 ptr_array.cpp 157: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *) Warning W8057 ptr_array.cpp 157: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *) *** 4 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj" "ptr_array.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj... ...skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.CMD for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.obj... ..skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.exe for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.run for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj ptr_map.cpp: Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 54: Type name expected Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 54: Declaration missing ; Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 91: Type name expected Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 91: Declaration missing ; Error E2451 ptr_map.cpp 206: Undefined symbol 'ex' in function test_map() Error E2228 ptr_map.cpp 206: Too many error or warning messages in function test_map() *** 6 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj" "ptr_map.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj... ...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.CMD for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.obj... ...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.exe for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.run for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj ptr_set.cpp: Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 58: Type name expected Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 58: Declaration missing ; Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 99: Type name expected Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 99: Declaration missing ; Error E2451 ptr_set.cpp 26: Undefined symbol 'ex' in function test_set() Error E2228 ptr_set.cpp 26: Too many error or warning messages in function test_set() *** 6 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj" "ptr_set.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj... ...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.CMD for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.obj... ...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.exe for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.run for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj ptr_deque.cpp: Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Base,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Error E2034 sequence_test_data.hpp 113: Cannot convert 'ptr_container_detail::static_move_ptr<Base,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<Base,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<Base,deque<void *,allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Warning W8004 sequence_test_data.hpp 132: 'ptr2' is assigned a value that is never used in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<allocator<void *> >(allocator<void *> &) Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<unsigned int>(unsigned int &) Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<Base>(Base &) Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<const Base>(const Base &) Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Value,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Value>,Value *)' in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>() Error E2034 sequence_test_data.hpp 113: Cannot convert 'ptr_container_detail::static_move_ptr<Value,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<Value,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<Value,deque<void *,allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>() Warning W8004 sequence_test_data.hpp 132: 'ptr2' is assigned a value that is never used in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>() Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<Value>(Value &) Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<const Value>(const Value &) Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<nullable<Base>,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_deque<nullable<Base>,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Error E2228 sequence_test_data.hpp 81: Too many error or warning messages in function void reversible_container_test<ptr_deque<nullable<Base>,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() *** 6 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj" "ptr_deque.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj... ...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.CMD for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.obj... ...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.exe for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.run for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj ptr_list.cpp: Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_list.hpp 45: Type name expected Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_list.hpp 45: Declaration missing ; Error E2316 sequence_test_data.hpp 34: 'clone' is not a member of 'ptr_list<Base,heap_clone_allocator,allocator<void *> >' in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Base,list<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_List_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Error E2089 sequence_test_data.hpp 104: Identifier 'auto_type' cannot have a type qualifier in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() Error E2228 sequence_test_data.hpp 104: Too many error or warning messages in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>() *** 6 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj" "ptr_list.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj... ...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.CMD for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.obj... ...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.exe for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.run for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.exe... borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj ptr_vector.cpp: Error E2285 ptr_vector.cpp 33: Could not find a match for 'ptr_sequence_adapter<int,vector<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<void * *,int>,int)' in function test_ptr_vector() Error E2451 ptr_vector.cpp 33: Undefined symbol 'ex' in function test_ptr_vector() Error E2285 ptr_vector.cpp 34: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector() Error E2285 ptr_vector.cpp 36: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector() Error E2285 ptr_vector.cpp 37: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector() Error E2228 ptr_vector.cpp 37: Too many error or warning messages in function test_ptr_vector() *** 6 errors in Compile *** "bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj" "ptr_vector.cpp" ...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj... ...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.CMD for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.obj... ...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.exe for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.CMD... ...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.run for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.exe... ...failed updating 9 targets... ...skipped 36 targets... ...updated 15 targets...

Russell Hind wrote:
I think the problem is the 'using base_type::release' in the macros at the end of reversible_ptr_container.hpp I don't think Borland is picking these up. I've tried to implement a release instead of the using, which just passes it on to base_type. This works for ptr_vector, but gives more compile errors in ptr_deque due to auto_type. Maybe you can help with this?
I think this also causes problems in ptr_sequence_adaptor.hpp where it declares a 'using base_name::insert' to bring in insert(pos,value) which is causing a test in 'assign' to fail Thanks Russell

"Russell Hind" <rh_gmane@mac.com> wrote in message news:d5sm08$a5a$2@sea.gmane.org... | Russell Hind wrote: | > I think the problem is the 'using base_type::release' in the macros at | > the end of reversible_ptr_container.hpp I don't think Borland is | > picking these up. I've tried to implement a release instead of the | > using, which just passes it on to base_type. This works for ptr_vector, | > but gives more compile errors in ptr_deque due to auto_type. Maybe you | > can help with this? | > | | I think this also causes problems in ptr_sequence_adaptor.hpp where it | declares a 'using base_name::insert' to bring in insert(pos,value) which | is causing a test in 'assign' to fail so will reimplementing this instead of using using base::X work? -Thorsten

"Russell Hind" <rh_gmane@mac.com> wrote in message news:d5sht0$ut1$1@sea.gmane.org... | Thorsten Ottosen wrote: | > Thanks. I have applied them and comitted. | > | | I've had to make some mods as Borland doesn't appear to like template | statements in macros. See attached but don't apply this without reading | my comments below | | > | The next error I'm not so sure on is in tutl.cpp line 233: | > | | > | tut1.cpp: | > | Error E2227 tut1.cpp 233: Extra parameter in call to | > | > I don't get this error. Do you know what the fix is? | > | | I think the problem is the 'using base_type::release' in the macros at | the end of reversible_ptr_container.hpp I don't think Borland is | picking these up. I've tried to implement a release instead of the | using, which just passes it on to base_type. This works for ptr_vector, | but gives more compile errors in ptr_deque due to auto_type. Maybe you | can help with this? well, release() returns base::auto_type which might not be avaiæable, so the way release() should be implemented is typename base_type::auto_type release( typename base_type::iterator i ) { return boost::ptr_container_detail::move( base_type::release(i) ); } | The other common error is on ptr_sequence_adaptor.hpp line 99. Perhaps | you understand what is happening here to? I've attached my test output | also. I think I changed this part of the file yesterday. Maybe you could tell me what line 99 is today by doing a cvs update? -Thorsten | public: | -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) | - BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list<T,CloneAllocator,Allocator>, | +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) | + typedef ptr_list<T,CloneAllocator,Allocator> this_type; | + BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type, | base_class ); where these kinds of typedefs necessary or did the cvs work ok? -Thorsten

Thorsten Ottosen wrote:
I think I changed this part of the file yesterday. Maybe you could tell me what line 99 is today by doing a cvs update?
I did an update this morning and line 99 is the return statement of this function: #ifdef BOOST_NO_SFINAE template< class Iter > static const U* get_const_pointer( Iter i ) { return static_cast<const U*>( *i.base() ); } #else // BOOST_NO_SFINAE
where these kinds of typedefs necessary or did the cvs work ok?
No, the typedefs are necessary. As soon as you put (a<T,U>,b) in to a preprocessor macro, it looks like Borland passes the first parameter in as up to the first i.e. a<T then U> then b so you need the typedefs to get rid of the extra commas. Cheers Russell

"Russell Hind" <rh_gmane@mac.com> wrote in message news:d5t5s4$os$1@sea.gmane.org... | Thorsten Ottosen wrote: | > | > I think I changed this part of the file yesterday. Maybe you could tell me | > what line 99 is today by doing a cvs update? | > | | I did an update this morning and line 99 is the return statement of this | function: | | #ifdef BOOST_NO_SFINAE | | template< class Iter > | static const U* get_const_pointer( Iter i ) | { | return static_cast<const U*>( *i.base() ); | } | | #else // BOOST_NO_SFINAE well, *i.base() returns a void*. So I don't know why the compiler won't compile it. | | > | > where these kinds of typedefs necessary or did the cvs work ok? | > | | No, the typedefs are necessary. As soon as you put (a<T,U>,b) in to a | preprocessor macro, it looks like Borland passes the first parameter in | as up to the first i.e. a<T then U> then b so you need the typedefs to | get rid of the extra commas. aah yes, I'll update that ASAP. -Thorsten

Hi Thorsten, Attached is another patch for ptr_container. It resolves more errors, but still leaves plenty. Would you like a copy of the bjam.log output to see the compile errors? (I didn't want to post it to the list as its 29k). I'm not really sure where to start fixing them. Cheers Russell Index: boost/ptr_container/detail/reversible_ptr_container.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/detail/reversible_ptr_container.hpp,v retrieving revision 1.13 diff -u -r1.13 reversible_ptr_container.hpp --- boost/ptr_container/detail/reversible_ptr_container.hpp 13 May 2005 15:20:05 -0000 1.13 +++ boost/ptr_container/detail/reversible_ptr_container.hpp 16 May 2005 13:38:50 -0000 @@ -17,6 +17,7 @@ # pragma once #endif +#include <boost/ptr_container/detail/move.hpp> #include <boost/ptr_container/detail/scoped_deleter.hpp> #include <boost/ptr_container/detail/static_move_ptr.hpp> #include <boost/ptr_container/exception.hpp> @@ -335,8 +336,13 @@ const allocator_type& a = allocator_type() ) // basic, strong : c_( a ) { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + constructor_impl( first, last, + iterator_category<InputIterator>::type() ); +#else constructor_impl( first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); +#endif } template< class Compare > Index: boost/ptr_container/ptr_array.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_array.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_array.hpp --- boost/ptr_container/ptr_array.hpp 1 May 2005 22:27:36 -0000 1.3 +++ boost/ptr_container/ptr_array.hpp 17 May 2005 07:26:01 -0000 @@ -82,10 +82,18 @@ ptr_array() : base_class() { } +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + ptr_array( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) +#else ptr_array( std::auto_ptr<ptr_array> r ) +#endif : base_class( r ) { } - void operator=( std::auto_ptr<ptr_array> r ) +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + void operator=( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) +#else + void operator=( std::auto_ptr<ptr_array> r ) +#endif { base_class::operator=(r); } Index: boost/ptr_container/ptr_sequence_adapter.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_sequence_adapter.hpp,v retrieving revision 1.21 diff -u -r1.21 ptr_sequence_adapter.hpp --- boost/ptr_container/ptr_sequence_adapter.hpp 14 May 2005 21:41:24 -0000 1.21 +++ boost/ptr_container/ptr_sequence_adapter.hpp 16 May 2005 13:30:12 -0000 @@ -96,7 +96,11 @@ template< class Iter > static const U* get_const_pointer( Iter i ) { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + return static_cast<const U*>( &*i ); +#else return static_cast<const U*>( *i.base() ); +#endif } #else // BOOST_NO_SFINAE @@ -340,13 +344,21 @@ public: - using base_type::insert; + iterator insert(iterator before, T* x) + { + return ba se_type::insert(before, x); + } template< class InputIterator > void insert( iterator before, InputIterator first, InputIterator last ) // strong { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + insert_impl( before, first, last, + iterator_category<InputIterator>::type() ); +#else insert_impl( before, first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); +#endif } #ifdef BOOST_NO_SFINAE

"Russell Hind" <rh_gmane@mac.com> wrote in message news:d6c6kl$psf$1@sea.gmane.org... | Hi Thorsten, | | Attached is another patch for ptr_container. It resolves more errors, | but still leaves plenty. Would you like a copy of the bjam.log output | to see the compile errors? (I didn't want to post it to the list as its | 29k). | | I'm not really sure where to start fixing them. Hi Russell, I think that running out of time, unfortunately. I will try to add all your patches tonight, but if there are still many errors, it seems like we're running out of time. Thanks for your effort so far -Thorsten

Thorsten Ottosen wrote:
Hi Russell,
I think that running out of time, unfortunately.
I will try to add all your patches tonight, but if there are still many errors, it seems like we're running out of time.
I agree. If you don't want to apply the patch, then leave it. I can start to look again after 1.33.0 has been released. Cheers Russell

Thorsten Ottosen wrote:
Hi Russell,
I think that running out of time, unfortunately.
I will try to add all your patches tonight, but if there are still many errors, it seems like we're running out of time.
Thanks for your effort so far
FWIW, there was an error in the patch for ptr_sequence_adaptor.hpp Attached is a fixed version. If you apply these patches to ptr_container, then assign will pass all tests bar (the insert change in ptr_sequence_adaptor fixes some errors in assign tests) multi_index_container.cpp // multi-index doesn't work with bcc32 tuple_list_of.cpp // not sure how to fix it list_of.cpp // not sure how to fix it Which may be worth it. Then I can start to look at the other failures after 1.33.0 Thanks Russell Index: boost/ptr_container/detail/reversible_ptr_container.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/detail/reversible_ptr_container.hpp,v retrieving revision 1.13 diff -u -r1.13 reversible_ptr_container.hpp --- boost/ptr_container/detail/reversible_ptr_container.hpp 13 May 2005 15:20:05 -0000 1.13 +++ boost/ptr_container/detail/reversible_ptr_container.hpp 16 May 2005 13:38:50 -0000 @@ -17,6 +17,7 @@ # pragma once #endif +#include <boost/ptr_container/detail/move.hpp> #include <boost/ptr_container/detail/scoped_deleter.hpp> #include <boost/ptr_container/detail/static_move_ptr.hpp> #include <boost/ptr_container/exception.hpp> @@ -335,8 +336,13 @@ const allocator_type& a = allocator_type() ) // basic, strong : c_( a ) { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + constructor_impl( first, last, + iterator_category<InputIterator>::type() ); +#else constructor_impl( first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); +#endif } template< class Compare > Index: boost/ptr_container/ptr_array.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_array.hpp,v retrieving revision 1.3 diff -u -r1.3 ptr_array.hpp --- boost/ptr_container/ptr_array.hpp 1 May 2005 22:27:36 -0000 1.3 +++ boost/ptr_container/ptr_array.hpp 17 May 2005 07:26:01 -0000 @@ -82,10 +82,18 @@ ptr_array() : base_class() { } +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + ptr_array( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) +#else ptr_array( std::auto_ptr<ptr_array> r ) +#endif : base_class( r ) { } - void operator=( std::auto_ptr<ptr_array> r ) +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + void operator=( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r ) +#else + void operator=( std::auto_ptr<ptr_array> r ) +#endif { base_class::operator=(r); } Index: boost/ptr_container/ptr_sequence_adapter.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_sequence_adapter.hpp,v retrieving revision 1.21 diff -u -r1.21 ptr_sequence_adapter.hpp --- boost/ptr_container/ptr_sequence_adapter.hpp 14 May 2005 21:41:24 -0000 1.21 +++ boost/ptr_container/ptr_sequence_adapter.hpp 17 May 2005 10:13:53 -0000 @@ -96,7 +96,11 @@ template< class Iter > static const U* get_const_pointer( Iter i ) { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + return static_cast<const U*>( &*i ); +#else return static_cast<const U*>( *i.base() ); +#endif } #else // BOOST_NO_SFINAE @@ -340,13 +344,25 @@ public: - using base_type::insert; +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + iterator insert(iterator before, T* x) + { + return base_type::insert(before, x); + } +#else + using base_type::insert; +#endif template< class InputIterator > void insert( iterator before, InputIterator first, InputIterator last ) // strong { +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + insert_impl( before, first, last, + iterator_category<InputIterator>::type() ); +#else insert_impl( before, first, last, BOOST_DEDUCED_TYPENAME iterator_category<InputIterator>::type() ); +#endif } #ifdef BOOST_NO_SFINAE
participants (2)
-
Russell Hind
-
Thorsten Ottosen