pointer-to-member.cpp [plain text]
void clang_analyzer_eval(bool);
struct A {
typedef A * (A::*MemberPointer);
operator MemberPointer() const { return m_ptr ? &A::m_ptr : 0; }
A *m_ptr;
};
void testConditionalUse() {
A obj;
obj.m_ptr = &obj;
clang_analyzer_eval(obj.m_ptr); clang_analyzer_eval(&A::m_ptr); clang_analyzer_eval(obj);
obj.m_ptr = 0;
clang_analyzer_eval(obj.m_ptr); clang_analyzer_eval(A::MemberPointer(0)); clang_analyzer_eval(obj); }
bool testDereferencing() {
A obj;
obj.m_ptr = 0;
A::MemberPointer member = &A::m_ptr;
clang_analyzer_eval(obj.*member == 0);
member = 0;
return obj.*member; }