Я использую новую библиотеку libcxx, и у меня есть код, который вызывает функцию сокета bind()
. Проблема в том, что когда я набираю с использованием пространства имен std;
компилятор выдает мне ошибку для следующего кода:
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Ошибка с использованием clang (сборка svn):
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Я думаю, что проблема в том, что использование пространства имен std;
переносит функцию std::bind()
из заголовка
в область видимости (хотя заголовок не включается). Поскольку я использую стороннюю библиотеку, которая использует все пространство имен std, я не могу легко изменить имена классов на полные имена.
Мне интересно, проблема ли это в реализации библиотеки или в C++11 есть какие-то новые правила, которые потенциально могут сломать старый код, использующий bind()
. Любые мысли по этому поводу будут оценены.
Спасибо
Roman