
Tim,
which implies that 'has_capacity' is allowed to be false. From what I can see 'has_capacity' could be false, indeed, in particular if the queue is not bounded in size.
the idea is that the default constructor is only allowed, when the capacity is set at compile-time. otherwise the data structure won't be completely lockfree, as creating new nodes will hit the memory allocator. so the assertion is correct, but the initialization of the pool can be changed.
Hmmm, I do not understand. If the queue is constructed with fixed_size<false> (which is the default), this assertion will _always_ fire as you're not required to specify a capacity in this case.
that's the purpose of this assertion. if the data structure is not fixed- sized, you should use the explicit queue(int capacity) constructor in order to populate the free-list.
In this case, I'd suggest converting the compile-time asserts into run-time asserts as all non-templated constructors are always instantiated regardless whether they will be called or not. Regards Hartmut --------------- http://boost-spirit.com http://stellar.cct.lsu.edu