Justificativa por trás da troca da função de membro

Na biblioteca padrão, se um tipo de classe tiver um algoritmo de troca especializado, ele terá uma função de membroswap e uma função livreswap que simplesmente encaminha para a função de membro. Eu não entendo bem a lógica de ter os dois (e, portanto, a duplicação de código), mas não apenas a função livre. Observe que, quando digo a função livre, entendo a função de troca livre especializada, não a genéricastd::swap modelo de função. Uma função especializada pode ter acesso privilegiado à classe relevante sendo amiga dela.

Eu tenho dois pontos para apoiar apenas deixar a função livre em vez da função de membro. Primeiro, ele forma uma interface de troca mais genérica para facilitar a escrita de algoritmos genéricos, pois tipos que não são de classe, como matrizes, não podem ter funções-membro. Segundo, swap é uma operação binária envolvendo dois operandos e demonstra um senso de simetria. É mais natural e intuitivo executar a troca usando uma função livre que não possui viés em nenhum dos operandos. Por esse motivo, sempre me senti um pouco estranho ao usar a função de membroswap como se eu estivesse executando alguma operação baseada no objeto de chamada.

questionAnswers(1)

yourAnswerToTheQuestion