¿Debería sobrecargar el intercambio en el espacio de nombres estándar?

Leí algo interesante hoy que decía que la forma "estándar" de llamar a swap en un tipo proporcionado por el usuario (proporcionado como un argumento de plantilla) es ...

using std::swap;
swap(something, soemthingelse);

El motivo de esto es usar la búsqueda dependiente de argumentos para usar unswap función en un espacio de nombres de usuario oswap en elstd espacio de nombres. Esto planteó una pregunta interesada para mí. Cuando sobrecargostd::swap para una de mis clases en realidad lo había estado definiendo en elstd espacio de nombres ...namespace std { void swap(/*...*/){/*...*/} }. Es esta practicaincorrecto? ¿Debo definir mi propiaswappecadostd o mi propio espacio de nombres (y por qué)?

Respuestas a la pregunta(5)

Su respuesta a la pregunta