Eu li que um operador sobrecarregado declarado como função de membro é assimétrico porque pode ter apenas um parâmetro e o outro parâmetro passado automaticamente é o this
ponteiro. Portanto, não existe um padrão para compará-los. Por outro lado, o operador sobrecarregado declarado como a friend
é simétrico porque passamos dois argumentos do mesmo tipo e, portanto, eles podem ser comparados.
Minha pergunta é que, quando ainda posso comparar o lvalue de um ponteiro com uma referência, por que os amigos são preferidos? (usar uma versão assimétrica dá os mesmos resultados que simétrica) Por que os algoritmos STL usam apenas versões simétricas?