Socket bind() error: invalid operands to binary expression

Viewed 1152

Code:

 if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {

Error:

fs_server.cpp:264:56: error: invalid operands to binary expression ('__bind<int &, sockaddr *,
      unsigned long>' and 'int')
    if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {

This was working when I run this code using C++11, and also works when I run this code using C++ 17 on Linux. It does not work when I run it on Mac OS using C++17. To me, it looks like the error indicates that the comparison is between the function itself and -1. I'm not sure why this would happen. Am I interpreting something incorrectly?

1 Answers

Your code is trying to call the C++ std::bind() function, not the socket bind() function. This is likely due to a using namespace std; statement in your code.

To ensure the correct function is being called, you can either get rid of the using statement, or else qualify the call as using the function from the global namespace:

if (::bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {
Related