This adds a partial specialization of allocator_traits, similar to what was already done for std::allocator. This means that most uses of polymorphic_allocator via the traits can avoid the metaprogramming overhead needed to deduce the properties from polymorphic_allocator. In addition, I'm changing polymorphic_allocator::delete_object to invoke the destructor (or pseudo-destructor) directly, rather than calling allocator_traits::destroy, which calls polymorphic_allocator::destroy (which is deprecated). This is observable if a user has specialized allocator_traits> and expects to see its destroy member function called. I consider explicit specializations of allocator_traits to be wrong-headed, and this use case seems unnecessary to support. So delete_object just invokes the destructor directly. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/std/memory_resource (polymorphic_allocator::delete_object): Call destructor directly instead of using destroy. (allocator_traits>): Define partial specialization. Tested powerpc64le-linux. Committed to trunk.