#pragma once template struct DefaultDeleter { void operator()(T* ptr) const { delete ptr; } }; template struct RemoveMemberPtrImpl {}; template struct RemoveMemberPtrImpl { using Type = U; }; template using RemoveMemberPtr = typename RemoveMemberPtrImpl::Type;