
Hello, excuse me, I am not sure whether this hasn't already been discussed or noted elsewhere, but aren't the allocator classes "pool_allocator<T,..>" and "fast_pool_allocator<T,..>" missing a template specialisation for T=void? In section 20.4.1 [lib.default.allocator] of the C++ standard 1998 the following specialisation is defined for class std::allocator: <code> template <class T> class allocator; // specialize for void: template <> class allocator<void> { public: typedef void* pointer; typedef const void* const_pointer; // reference-to-void members are impossible. typedef void value_type; template <class U> struct rebind { typedef allocator<U> other; }; }; </code> The library boost::multi_index, e.g., currently uses the std::allocator<void> notation. In order to use the pool allocators with multi_index_container I would suggest the following additions (or something similar) to pool_alloc.hpp: <code> template< typename UserAllocator, typename Mutex, unsigned NextSize> class pool_allocator<void, UserAllocator, Mutex, NextSize> { public: typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template <class U> struct rebind { typedef pool_allocator<U, UserAllocator, Mutex, NextSize> other; }; }; template< typename UserAllocator, typename Mutex, unsigned NextSize> class fast_pool_allocator<void, UserAllocator, Mutex, NextSize> { public: typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template <class U> struct rebind { typedef fast_pool_allocator< U, UserAllocator, Mutex, NextSize> other; }; }; </code> Best regards Armin