Estoy utilizando la nueva biblioteca libcxx y tengo un código que llama a la función de socket bind()
. El problema es que cuando escribo using namespace std;
el compilador me da un error para el siguiente código:Código de compilación que utiliza la función de socket bind() con libcxx falla
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
el error utilizando sonido metálico (acumulación SVN):
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
creo que el problema es que using namespace std;
trae la función std::bind()
del encabezado <functional>
al alcance (aunque el encabezado no está incluido). Como estoy usando una biblioteca de terceros que usa todo el espacio de nombres completo, no puedo cambiar fácilmente los nombres de las clases por nombres completamente calificados.
Me preguntaba si esto es un problema en la implementación de la biblioteca o si hay algunas reglas nuevas en C++ 11 que podrían romper un código antiguo que usa bind()
. Se apreciaría cualquier sugerencia sobre esto.
Gracias
romana
¿Qué quiere decir cuando dice que la biblioteca de terceros utiliza todo el espacio de nombres estándar? – Troubadour
Quiero decir que tiene 'using namespace std;' en algunos de los archivos. –
¿Presumiblemente solo en los archivos fuente y no en los encabezados? Eso no debería afectarte en absoluto. – Troubadour