
I wrote:
On Wed, Jan 29, 2020 at 12:27 AM Gavin Lambert via Boost wrote:
https://www.boost.org/doc/libs/1_72_0/libs/smart_ptr/doc/html/smart_ptr.html...
claims that it returns a std::unique_ptr<T[], D>.
Correct.
A std::unique_ptr<T[], D> stores a D::pointer.
In our case, D is alloc_deleter<T[], A> and its ::pointer is an alloc_ptr<T[], Allocator>.
This alloc_ptr<T[], Allocator> stores an A::pointer and a size_t.
This seems incompatible with what you're saying above.
It isn't.
(There is also no mention of ptr() or size() there.)
It specifies that the ::pointer is an 'unspecified' pointer-like type. I forgot to document that on this unspecified pointer type one can use .ptr() to get the Allocator::pointer and .size() to get the size.
Basically, a unique_ptr result from an allocate_unique<T[]>(a, n) _has_ to store the n somewhere in the unique_ptr because it needs to know how many objects to destroy and what size storage to deallocate. I also provide access for you to get that n. (I just forgot to put it in the documentation). Glen