template struct remove_member_pointer { typedef T type; }; template struct remove_member_pointer { typedef T type; }; template struct baseof_member_pointer { typedef T type; }; template struct baseof_member_pointer { typedef Parent type; }; template struct _PtrByteAccess { // ... }; // Without C++17 need this #define PtrByteAccess(MemberPtr, pos, size) \ _PtrByteAccess::type, \ remove_member_pointer::type, \ MemberPtr, pos, size>