Gregory Colvin <[EMAIL PROTECTED]> writes: > On Monday, Sep 1, 2003, at 14:48 America/Denver, David Abrahams wrote: >> Gregory Colvin <[EMAIL PROTECTED]> writes: >> >>>>> Conforming containers had better use them. >>>> >>>> I'm sorry, but I think that's flat wrong. What do you suppose that >>>> entry in column 2 of the allocator requirements table (20.1.5) means, >>>> after all? >>> >>> It means any value returned by construct, destroy, or deallocate goes >>> unused. >>> >>>>> And once you are down in the coal mine customizing what a pointer >>>>> is, I'm not sure you won't need to customize how to construct and >>>>> destroy. >>>> >>>> The class getting constructed/destroyed has full control over that or >>>> the language is utterly bustificated. >>> >>> Yes, but the allocator may want to do something else as well, and >>> construct and destroy serve as hooks for whatever that may be. >> >> Regardless, there is absolutely _nothing_ in the standard AFAICT which >> indicates the containers must use the allocator's construct and >> destroy, and several implementations in fact do not. > > Well then, I consider the standard broken in that regard. But we are > off the topic that started this thread. > > Apropos of which, I now think that the Boost UserAllocator requirements > should be the default for components that parameterize how they use > memory, with the Standard Allocator requirements being used only for > components that need what they offer: a potentially very efficient way > to allocate large numbers of small objects of known type, and/or a > way to access storage via proxied pointers.
I think part of my point was that *nobody* needs what they offer, if you include construct/destroy. In fact, construct requires undefined behavior for non-POD T because you can't copy its T* argument which points into raw storage. I think I would rather see a MPL lambda expression or metafunction class interface for allocator type parameters. It makes little sense for the allocator's user to be choosing its value_type. Something like: some_allocator<_1> or struct select_allocator { template <class T> struct apply { typedef some_allocator<T> type; }; }; with some_allocator's interface being like what's required for std::allocator but not including misplaced interface bits such as address/construct/destroy, and possibly max_size -- these can be added by a std::allocator facade wrapper if neccessary. I'm not sure we need a simple version and a complicated version. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost