
// This compiles nicely aux_ptr ptr(new aux()); cout << (_1->*&aux::b)(ptr) << endl;
Hmm... why does this even compile? strange.
I see, after looking at the code I don't see a specialization for plain_return_type_2<other_action<member_pointer_action> >. FYI I'm using g++ 4.1.1.
Both versions above are delayed calls to user-defined operator->* and the in general the library won't guess what the result type should be. In the latter case the lib would have to guess that constness of aux_ptr means that R should be constified in the return, which is too much guess work.
Maybe lambda could support what I think is a common scenario, i.e., smart pointer-like objects. The worst think that may happen is, IMO, a compilation failure. Regards, Rodolfo Lima.