#define SOD_XCHAIN(chead, p) ((char *)(p) + (p)->_vt->_off_##chead)
+/* --- @SOD_OFFSETDIFF@ --- *
+ *
+ * Arguments: @type@ = a simple (i.e., declaratorless) type name
+ * @mema, memb@ = members of @type@
+ *
+ * Returns: The relative offset from @mema@ to @memb@, as a @ptrdiff_t@.
+ *
+ * Use: Computes a signed offset between structure members.
+ */
+
+#define SOD_OFFSETDIFF(type, mema, memb) \
+ ((ptrdiff_t)offsetof(type, memb) - (ptrdiff_t)offsetof(type, mema))
+
/* --- @SOD_ILAYOUT@ --- *
*
* Arguments: @cls@ = name of a class