In section 20.4.1 [lib.default.allocator] of the C++ standard the following specialisation is defined for class std::allocator as follows: template class allocator; // specialize for void: template <> class allocator { public: typedef void* pointer; typedef const void* const_pointer; // reference-to-void members are impossible. typedef void value_type; template struct rebind { typedef allocator other; }; }; In order to use the pool allocators with multi_index_container and ease generic programming, I would suggest the following additions to pool_alloc.hpp: template< typename UserAllocator, typename Mutex, unsigned NextSize> class pool_allocator { public: typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template struct rebind { typedef pool_allocator other; }; }; template< typename UserAllocator, typename Mutex, unsigned NextSize> class fast_pool_allocator { public: typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template struct rebind { typedef fast_pool_allocator other; }; };