1. Revision History
1.1. Revision 0
Initial Release 🎉
2. Motivation
While it would be nice to assume that 
An example of this problem can be found below (actual final binding code has been removed for clarity):
#include <Python.h>#include "structmember.h"struct CustomObject { PyObject_HEAD PyObject * first ; PyObject * last ; int number ; }; static PyMemberDef Custom_members [] = { { "first" , T_OBJECT_EX , offsetof ( CustomObject , first ), 0 , "first name" }, { "last" , T_OBJECT_EX , offsetof ( CustomObject , last ), 0 , "last name" }, { "number" , T_INT , offsetof ( CustomObject , number ), 0 , "custom number" }, { } /* Sentinel */ }; 
As we can see above, offsets for 
template < class T > PyMemberDef readonly ( PyObject * ( T ::* member ), char const * name , char const * docs = nullptr ) { return { name , T_OBJECT_EX , offsetof ( T , member ), READONLY , docs }; } template < class T > PyMemberDef member ( PyObject * ( T ::* member ), char const * name , char const * docs = nullptr ) { return { name , T_OBJECT_EX , offsetof ( T , member ), 0 , docs }; } 
This paper attempts to fix this by creating a new function named 
3. Design Considerations
The design for 
There is, however, one interesting caveat. 
To match 
4. Wording
The following is working for the library section.
namespace std { template < class T > ptrdiff_t offset ( T const & pmd ) noexcept ; } 
- 
      Constraints This function shall not participate in overload resolution unless: 
      - 
        std :: is_member_object_pointer_v < T > true
- 
        std :: is_standard_layout_v < class - of < T >> true
 Note: There is not std :: class_of_t < T > 
- 
        
- 
      Returns 
      An object of type std :: ptrdiff_t T T 
- 
      Remarks 
      While offsetof offset 
4.1. Feature Testing
The