Gregory Colvin <[EMAIL PROTECTED]> writes: > On Tuesday, Sep 2, 2003, at 09:22 America/Denver, David Abrahams wrote: > >> Gregory Colvin <[EMAIL PROTECTED]> writes: >> >>>> I think part of my point was that *nobody* needs what they offer, if >>>> you include construct/destroy. >>> >>> Or rather that some implementations have failed to use what they >>> offer, and our standard unfortunately doesn't insist that they do. >> >> It's not unfortunate if it adds nothing, which is what I believe. >> >>> Another reason construct is needed is that Allocator::pointer might >>> be a proxy, with operator* and operator-> but not necessarily a >>> conversion to void* or even T*. >> >> Doesn't matter; you can always get the address of an object. See >> http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-closed.html#390 > > So you would rather use this than use construct? > > template <typename T> T* addressof(T& v) > { > return reinterpret_cast<T*>( > &const_cast<char&>(reinterpret_cast<const volatile char > &>(v))); > }
As long as it's packaged away and I don't have to look at the implementation. A customization point like an allocator should not be required to supply boilerplate that's always going to be the same. When I need to find out what I need to implement in order to customize allocation, I don't want to have to read through something which is 50% irrelevant to the task, as the allocator requirements are. >>>> In fact, construct requires undefined behavior for non-POD T >>>> because you can't copy its T* argument which points into raw >>>> storage. >>> >>> I don't understand what you mean by this. Are you claiming that >>> it is undefined to copy just a pointer to raw storage? >> >> Unless the pointer has the right type, yes. > > In which case the A::pointer return from A::allocate() is already > undefined behavior? Wow. Yes, IIUC. DR, I guess. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost