
bool enqueue(T const & t); Shouldn't this function throw an exception if t cannot be enqueued?
i would prefer not to throw an exception! if a constant-size freelist is used, the enqueue operation may fail, although no `error' occurred. i prefer this interface
If memory for the operation cannot be obtained, I believe common practice is to throw an exception. IMO, it does not matter if a fixed size pool is exhausted or the global heap, since the effect is the same -> a no op. With current interface I'd need to always check return value for every enqueue for out of memory conditions, something I don't need to do with any other container.
The following doesn't look correct to me: If pool.allocate() is not supposed to throw an exception, you're constructing a node on a null pointer. node * alloc_node(void) { node * chunk = pool.allocate(); new(chunk) node(); <---------- chunk may be 0? return chunk; } Also, the code requires T to be default constructible. I think something like this would work: node* alloc_node(T const& v) { node * chunk = pool.allocate(); if(chunk) { new(chunk) node(v); } return chunk; } / christian