clang-6 和 -std=c++17 -- 不能调用 bind(2)

clang-6 and -std=c++17 -- can't invoke bind(2)

本文关键字:bind 调用 不能 -std c++17 clang-6      更新时间:2023-10-16

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

   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
....

不知何故,完全标准的函数bind(2)似乎被重新声明为返回error_code而不是旧的int

这是怎么回事?我如何很好地解决这个问题 - 并保持代码可与早期编译器一起编译?

您的

程序中可能有using namespace std或类似的功能,在这种情况下,编译器可能会认为您想要std::bind

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