que estaba buscando a través de la Google C++ style guide, y me encontré con esto:.¿Mala práctica para declarar nombres en el espacio de nombres estándar?
"no se declara nada en namespace std, ni siquiera hacia adelante declaraciones de clases de la biblioteca estándar Declarar entidades en namespace std es un comportamiento indefinido, es decir, no es portátil. Para declarar entidades de la biblioteca estándar, incluya el archivo de encabezado apropiado ".
¿Podría alguien explicar lo que esto significa y por qué esto es un comportamiento indefinido usando un código de ejemplo?
Excepto que especializa 'std :: swap <>()'. Estamos autorizados a hacer eso. : p – wilhelmtell
@wilhelmtell: incluso esa es una forma muy pobre. Es mejor definir una sobrecarga de intercambio en el mismo espacio de nombres que su tipo y dejar que ADL haga el trabajo de encontrarlo. – ildjarn
@wilhelmtell: Puede _especializar_ plantillas 'std'; no puede _overload_ plantillas 'std'. Para 'swap', la solución preferida, como dice @ildjarn, es usar una función de ámbito de espacio de nombres que se puede encontrar a través de ADL. C++ 0x otorga aprobación formal a esa técnica mediante la adición de un concepto "Swappable". –