#include <iostream>
 
struct A {
    void operator()() { std::cout << "foo" << std::endl; }
};
 
struct B {
    A* operator->() { return (A*)0; }
};
 
struct C {
    B& operator->() { return *(B*)0; }
};
 
struct D {
    C& operator->() { return *(C*)0; }
};
 
int main()
{
    D()->operator()();
}
