'operator –>' recursion occurred through type 'type'
Your code allows operator–> to call itself.
Example
struct A; struct B; struct C; struct A { int z; B& operator->(); }; struct B { C& operator->(); }; struct C { A& operator->(); }; void f(A p) { int i = p->z; // warning C4281 }