std::allocator_traits::destroy
From cppreference.com
                    
                                        
                    < cpp | memory | allocator traits
                    
                                                            
                    |   Defined in header  
<memory>
  | 
||
|   template< class T > 
static void destroy( Alloc& a, T* p );  | 
(since C++11) | |
Calls the destructor of the object pointed to by p. If possible, does so by calling a.destroy(p). If not possible (e.g. a does not have the member function destroy(), then calls the destructor of *p directly, as p->~T().
Contents | 
[edit] Parameters
| a | - | allocator to use for destruction | 
| p | - | pointer to the object being destroyed | 
[edit] Return value
(none)
[edit] Notes
Because this function provides the automatic fall back to direct call to the destructor, the member function destroy() is an optional Allocator requirement since C++11.
[edit] See also
|    destructs an object in allocated storage  (public member function of std::allocator) 
 |