对不完整类型的对象取地址,但该对象的完整类型重载了 operator &
C++-Undefined-Behavior-37
示例:
struct T; // Incomplete type
T* foo(T& obj) {
return &obj; // Undefined behavior
}
struct T {
T* operator &(); // Overload
};
在 foo 函数中参数 obj 的类型是不完整的,但其完整类型重载了 operator &,导致未定义的行为。
依据
ISO/IEC 14882:2003 5.3.1(4)-undefined
ISO/IEC 14882:2011 5.3.1(5)-undefined