llvm/clang/test/SemaCXX/builtin-ptrtomember-overload.cpp

// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
// expected-no-diagnostics

struct A {};

struct B {
	operator A*();
};

struct C : B {

};


void foo(C c, B b, int A::* pmf) {
	int j = c->*pmf; 
	int i = b->*pmf;
}

struct D {
 operator const D *();
};

struct DPtr {
 operator volatile int D::*();
};

int test(D d, DPtr dptr) {
 return d->*dptr;
}