public función de miembro de intercambio de amigos

En la hermosa respuesta a la copiar-e-intercambiar-idioma hay un fragmento de código que necesito un poco de ayuda:

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);
    }
    // ...
};

y agrega una nota

Hay otras afirmaciones de que deberíamos especializarnos en std :: swap para nuestro tipo, proporcionar un intercambio en su clase junto a un intercambio de función libre, etc. Pero todo esto es innecesario: cualquier uso adecuado del intercambio se realizará a través de un no calificado llame, y nuestra función se encontrará a través de ADL. Una función servirá.

Confriend Estoy un poco en términos "hostiles", debo admitirlo. Entonces, mis preguntas principales son:

parece una función libre, pero ¿está dentro del cuerpo de la clase?por qué no es estaswap static? Obviamente no usa ninguna variable miembro. "Cualquier uso adecuado del intercambio descubrirá el intercambio a través de ADL"? ADL buscará los espacios de nombres, ¿verdad? ¿Pero también se ve dentro de las clases? O es aquí dondefriend ¿viene en

Preguntas secundarias:

Con C ++ 11, ¿debo marcar miswaps connoexcept?Con C ++ 11 y su rango-para, debería colocarfriend iter begin() yfriend iter end() de la misma manera dentro de la clase? Pienso que elfriend no es necesario aquí, ¿verdad?

Respuestas a la pregunta(2)

Su respuesta a la pregunta