Что такое оператор -> * в C ++?

C ++ продолжает удивлять меня. Сегодня я узнал об операторе -> *. Он перегружен, но я понятия не имею, как его вызвать. Мне удается перегрузить его в моем классе, но я понятия не имею, как это назвать.

struct B { int a; };

struct A
{
    typedef int (A::*a_func)(void);
    B *p;
    int a,b,c;
    A() { a=0; }
    A(int bb) { b=b; c=b; }
    int operator + (int a) { return 2; }
    int operator ->* (a_func a) { return 99; }
    int operator ->* (int a) { return 94; }
    int operator * (int a) { return 2; }
    B* operator -> () { return p; }


    int ff() { return 4; }
};


void main()
{
    A a;
    A*p = &a;
    a + 2;
}

редактировать:

Спасибо за ответ. Для вызова перегруженной функции я пишу

void main()
{
    A a;
    A*p = &a;
    a + 2;
    a->a;
    A::a_func f = &A::ff;
    (&a->*f)();
    (a->*f); //this
}

Ответы на вопрос(2)

Ваш ответ на вопрос