+/**
+ * Cast a member of a structure out to the containing structure.
+ *
+ * \param ptr the pointer to the member.
+ * \param type the type of the container struct this is embedded in.
+ * \param member the name of the member within the struct.
+ */
+#if COMPILER_TYPEOF && COMPILER_STATEMENT_EXPRESSIONS
+ #define containerof(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *_mptr = (ptr); /* type check */ \
+ (type *)((char *)_mptr - offsetof(type, member)); \
+ })
+#else
+ #define containerof(ptr, type, member) \
+ ( (type *)((char *)(ptr) - offsetof(type, member)) )
+#endif
+
+/** Issue a compilation error if the \a condition is false */