Q:

What does .*, ->* and .-> mean in C++?

I have been recently learning how to use the std::mem_fn library facility. In C++ Primer 5th edition they give an example of a usage of std::mem_fn, in the following code snippet svec is a vector of strings: 
auto f = mem_fn(&string::empty); // f takes a string or a string*

f(*svec.begin()); // ok: passes a string object; f uses .* to call empty

f(&svec[0]); // ok: passes a pointer to string; f uses .-> to call empty

Note: In the above code snippet there is no use of ->*
Although I understand the usage .* and ->*. I don't have clarity on it. 
So, My question is what does .*, ->*, .-> do? 

A:

You have an object o and a pointer to its member m. The operator .*  allows you to access the pointed member of your object:
o.*m

You have a pointer to an object p and a pointer to its member m. The operator ->* allows you to access the pointed member of the pointed object:
p->*m

I am afraid that the operator .-> doesn't exist.

