C++ clang-6和-std=c++;17——can';t调用绑定(2)

C++ clang-6和-std=c++;17——can';t调用绑定(2),c++,network-programming,c++17,C++,Network Programming,C++17,尝试使用带有-std=c++17标志的clang++6.0版编译以下代码: if (bind(ssock, res->ai_addr, res->ai_addrlen) != 0) { return -1; } 我得到以下错误: .../udt4/app/test.cpp:90:51: error: invalid operands to binary expression ('__bind<int &, sockaddr *

尝试使用带有
-std=c++17
标志的clang++6.0版编译以下代码:

   if (bind(ssock, res->ai_addr, res->ai_addrlen) != 0)
   {
      return -1;
   }
我得到以下错误:

.../udt4/app/test.cpp:90:51: error: invalid operands
      to binary expression ('__bind<int &, sockaddr *&, unsigned int &>' and
      'int')
   if (bind(ssock, res->ai_addr, res->ai_addrlen) != 0)
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~
/usr/include/c++/v1/system_error:587:1: note: candidate function not viable: no
      known conversion from '__bind<int &, sockaddr *&, unsigned int &>' to
      'const std::__1::error_code' for 1st argument
operator!=(const error_code& __x, const error_code& __y) _NOEXCEPT
....
../udt4/app/test.cpp:90:51:错误:无效操作数
到二进制表达式(“绑定”和
‘int’)
如果(绑定(ssock,res->ai_addr,res->ai_addrlen)!=0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~
/usr/include/c++/v1/system_错误:587:1:注意:候选函数不可行:否
从“\uu bind”到的已知转换
第一个参数的“const std::_1::error_code”
接线员=(常量错误代码和常量错误代码和常量错误代码和常量错误代码)无例外
....
不知何故,完美的标准函数
bind(2)
似乎被重新声明为返回
error\u code
,而不是原来的
int


发生什么事了?如何很好地解决这个问题,并使代码能够用早期的编译器编译?

您的程序中可能会使用
名称空间std
或类似的名称空间,在这种情况下,编译器可能会认为您需要
std::bind


要引用您可能真正想要的绑定,可以使用
::bind

::bind
-并确保包含相关的头文件。看起来像是有人在使用。实际上,该行位于文件的顶部。
std::bind有什么问题,我该如何检查它的结果?。它没有任何问题,只是你不想在这里使用它(在全局范围内是好的)。但是
使用名称空间std(也)在作用域中引入它。不,与套接字无关。