¿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 propiaswap
pecadostd
o mi propio espacio de nombres (y por qué)?