Eu entendo mais sobrecarga de operadores, com excepção dos operadores de acesso membro ->, .*, ->*etc.
Em particular, o que é passado para essas funções do operador e o que deve ser retornado?
Como o operador funciona (por exemplo operator->(...)) sabe a que membro está sendo referido? Ele pode saber? Precisa mesmo saber?
Finalmente, existem considerações constantes que precisam ser levadas em consideração? Por exemplo, ao sobrecarregar algo como operator[], geralmente você precisará de uma versão const e não-const. Os operadores de acesso a membros exigem versões const e não-const?
conste não constversões operator->não são necessárias , mas fornecer ambos pode ser útil.
->*e .*. Na verdade, nem sequer os menciona! Eu sinto que eles são raros em estar em uma FAQ, mas gostaria de vincular esta pergunta a partir da FAQ. Por favor, não feche isso como uma fraude do FAQ!