En C++, poner una función o una variable en un espacio de nombre anónimo hace que su vinculación sea interna, i. mi. lo mismo que declararlo static
en un nivel de archivo, pero C++ idiomático.Vinculación de símbolos dentro del espacio de nombres anónimo dentro de un espacio de nombre normal
¿Qué pasa con un espacio de nombres anónimo dentro de un espacio de nombres normal? ¿Todavía garantiza la vinculación interna?
// foo.cpp
void func1() {
// external linkage
}
static void func2() {
// internal linkage
}
namespace {
void func3() {
// internal linkage
}
}
namespace ns1 {
void func4() {
// external linkage
}
namespace {
void func3() {
// still internal linkage?
}
}
}
Asunción errónea. Las variables dentro de un espacio de nombre anónimo tienen un enlace externo, a menos que se declare 'estático'. – MSalters
@MSalters: creo que con C++ 11 esto ha cambiado. '§3.5/4: Un espacio de nombres sin nombre o un espacio de nombres declarado directa o indirectamente dentro de un espacio de nombre sin nombre tiene un enlace interno. Todos los demás espacios de nombres tienen enlaces externos. – legends2k
@ legends2k: Eso es parte de otro cambio, que hizo que esos nombres fueran válidos como argumentos de plantilla (En C++ 03, los argumentos de plantilla necesitaban un enlace externo, que las constantes definían en un espacio de nombres anónimo) – MSalters