unção de membro de troca de amigo público

Na bela resposta para o idioma da cópia e troca existe um código, preciso de um pouco de ajuda:

class dumb_array
{
public:
    // ...
    friend void swap(dumb_array& first, dumb_array& second) // nothrow
    {
        using std::swap; 
        swap(first.mSize, second.mSize); 
        swap(first.mArray, second.mArray);
    }
    // ...
};

e ele adiciona uma nota

Há outras alegações de que devemos especializar std :: swap para o nosso tipo, fornecer uma troca dentro da classe ao lado de uma troca de função livre, etc. chamada, e nossa função será encontrada através do ADL. Uma função funcionar

Withfriend Estou um pouco em termos "hostis", devo admitir. Então, minhas principais perguntas são:

parece uma função livre, mas está dentro do corpo da classe?por que não é issoswap static? Obviamente, ele não usa nenhuma variável de membr "Qualquer uso adequado do swap descobrirá o swap via ADL"? A ADL pesquisará os namespaces, certo? Mas também olha dentro das classes? Ou é aqui ondefriend entra

Questões paralelas:

om C ++ 11, devo marcar meuswaps comnoexcept? Com C ++ 11 e seus intervalo-para, devo colocarfriend iter begin() efriend iter end() da mesma maneira dentro da classe? Eu acho que ofriend não é necessário aqui, certo?

questionAnswers(2)

yourAnswerToTheQuestion