Sto usando la nuova libreria libcxx e ho un codice che chiama la funzione socket bind()
. Il problema è che quando digito using namespace std;
il compilatore mi dà un errore per il seguente codice:Codice di compilazione che utilizza la funzione socket bind() con libcxx fallisce
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
L'errore utilizzando clang (accumulo svn):
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
penso che il problema è che using namespace std;
porta la funzione std::bind()
dall'intestazione <functional>
all'ambito (sebbene l'intestazione non sia inclusa). Poiché utilizzo una libreria di terze parti che utilizza l'intero spazio dei nomi std, non è possibile modificare facilmente i nomi delle classi con nomi completi.
Mi chiedevo se questo è un problema nell'implementazione della libreria o se ci sono alcune nuove regole in C++ 11 che potrebbero potenzialmente rompere un vecchio codice che utilizza bind()
. Qualunque pensiero a questo proposito sarebbe apprezzato.
Grazie
romana
Che cosa intendi quando dici che la libreria di terze parti utilizza l'intero spazio dei nomi std? – Troubadour
Voglio dire che ha 'using namespace std;' in alcuni dei file. –
Presumibilmente solo nei file di origine e non nelle intestazioni? Questo non dovrebbe influenzarti affatto. – Troubadour