这个错误有点闹心,因为 C++11 把 关键字typeof改为decltype了。
怎么做好两者的兼容性呢,只能使用 if 宏判断来做,比如我的代码:
#if __cplusplus >= 201103L
#define container_of(ptr, type, member) ({ \
const decltype(((type *)0)->member)*__mptr = (ptr); \
(type *)((char *)__mptr - offsetof_lh(type, member)); })
#else
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member)*__mptr = (ptr); \
(type *)((char *)__mptr - offsetof_lh(type, member)); })
#endif
参考: