Tengo un pequeño código aquí para su consideración que me desconcierta bastante. Lo extraño es que compila tanto en Sun Studio como en GCC aunque creo que no debería.Las funciones con argumentos de clase se filtran de un espacio de nombres?
Considera:
namespace name
{
class C
{
int a;
};
void f(C c);
void g(int a);
}
int main(int argc, char** argv)
{
name::C c;
name::f(c);
f(c); // <--- this compiles, strangely enough
name::g(42);
// g(42); <--- this does not, as I expected
}
El argumento de clase desde el mismo espacio de nombres hace que la función f
a 'fuga' fuera del espacio de nombres y ser accesibles sin name::
.
¿Alguien tiene una explicación para esto? Sin duda, yo y no el compilador estamos equivocados aquí.
Interesante, BTW intel compiler (icpc) compila esto también ... – Artyom
Edité mi propia pregunta para eliminar los bits irrelevantes y facilitar la búsqueda para otros con el mismo problema. – lytenyn