This patch add support for "fancy pointers/allocators" as well as fixing support for shared_pointer and "minimal" allocators.
Fancy pointers are class types that meet the NullablePointer requirements. In our case they are created by fancy allocators. support/min_allocator.h is an archetype for these types.
There are three types of changes made in this patch:
- _Alloc::template rebind<T>::other -> __allocator_traits_rebind<_Alloc, T>::type. This change was made because allocators don't need a rebind template. __allocator_traits_rebind is used instead of allocator_traits::rebind because use of allocator_traits::rebind requires a workaround for when template aliases are unavailable.
- a.deallocate(this, 1) -> a.deallocate(pointer_traits<self>::pointer_to(*this), 1). This change change is made because fancy pointers aren't always constructible from raw pointers.
- p.get() -> addressof(*p.get()). Fancy pointers aren't actually a pointer. When we need a "real" pointer we take the address of dereferencing the fancy pointer. This should give us the actual raw pointer.