This library looks good, and good things provoke requests like these. Here's an initial list:
-
An Allocator doesn't have to be a template with a single parameter. i.e. The template parameter shouldn't be template<typename> class Allocator but instead just class Allocator. You can default it to std::allocator<char>, it doesn't matter, since you'll be rebinding as necessary.
-
An Allocator doesn't have to be default constructible or stateless. All functions should accept an allocator instance, const Allocator& a. You can default this to an instance of Allocator() but users who use allocators where this is not an option, can supply the appropriate instance.
-
Allocator construction shouldn't use addressof(*ptr) but instead to_address(ptr) (using addressof(*ptr) here before ptr references an object of T is undefined behavior).
-
Allocators might be final so do not derive from them unconditionally. Instead of deriving from Allocator, derive from a facility like boost::empty_value<Allocator> (which will use inheritance if not final, or otherwise just store a member).
This library looks good, and good things provoke requests like these. Here's an initial list:
An Allocator doesn't have to be a template with a single parameter. i.e. The template parameter shouldn't be
template<typename> class Allocatorbut instead justclass Allocator. You can default it tostd::allocator<char>, it doesn't matter, since you'll be rebinding as necessary.An Allocator doesn't have to be default constructible or stateless. All functions should accept an allocator instance,
const Allocator& a. You can default this to an instance ofAllocator()but users who use allocators where this is not an option, can supply the appropriate instance.Allocator construction shouldn't use
addressof(*ptr)but insteadto_address(ptr)(usingaddressof(*ptr)here before ptr references an object of T is undefined behavior).Allocators might be
finalso do not derive from them unconditionally. Instead of deriving from Allocator, derive from a facility likeboost::empty_value<Allocator>(which will use inheritance if not final, or otherwise just store a member).