用 static_cast 将成员指针转为基类成员指针时,基类中没有相关成员
C++-Undefined-Behavior-34
示例:
struct B { int b; };
struct D: B { int d; };
int D::* mpb = &D::b;
int D::* mpd = &D::d;
static_cast<int B::*>(mpb); // OK
static_cast<int B::*>(mpd); // Undefined behavior
例中基类没有成员 d,将指向成员 d 的成员指针转为基类成员指针会导致未定义的行为。
依据
ISO/IEC 14882:2003 5.2.9(9)-undefined
ISO/IEC 14882:2011 5.2.9(12)-undefined