No veo ningún sentido al poner un espacio de nombre anónimo en un archivo de encabezado. He grepped las cabeceras del libstdC++ estándar y, no encontró espacios de nombres anónimos, aparte de uno en la cabecera tuple
(C++ 1x cosas):
// A class (and instance) which can be used in 'tie' when an element
// of a tuple is not required
struct _Swallow_assign
{
template<class _Tp>
_Swallow_assign&
operator=(const _Tp&)
{ return *this; }
};
// TODO: Put this in some kind of shared file.
namespace
{
_Swallow_assign ignore;
}; // anonymous namespace
Esto es lo que puede hacer
std::tie(a, std::ignore, b) = some_tuple;
a los elementos del some_tuple se les asignan las variables en el lado izquierdo (ver here), se usa una técnica similar para el iterador this. El segundo elemento es ignorado.
Pero como dicen, debe colocarse en un archivo .cpp y la instancia debe ser compartida por todos los usuarios. Ellos pusieron una declaración de que en la cabecera como esta a continuación:
extern _Swallow_assign ignore;
Ver esta discusión: [http://stackoverflow.com/questions/357404/anonynous-namespaces](http://stackoverflow.com/questions/357404/anonynous-namespaces) –
eso es el hilo donde ha obtenido esa información de espacios de nombres anónimos en los encabezados es malo –
No encuentro nada en ese hilo sobre su uso en los archivos de encabezado. ¿Alguien puede explicar por qué esto está mal? ¿Y todavía se aplica en C++ 11? – baruch