C2678 이항 '!=': 왼쪽 피연산자로 'std::_Binder' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.

비주얼 스튜디오 2008에서 2015로 마이그레이션 중 아래와 같은 에러가 있었습니다.

C2678 이항 '!=': 왼쪽 피연산자로 'std::_Binder<std::_Unforced,SOCKET &,SOCKADDR *,int &>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.

if(bind(sock,(SOCKADDR*)&adr,iSize) != SOCKET_ERROR)

위와 같이 소켓 바인드를 사용하는 코드였는데 아래와 같이 std::_Binder로 인식이 되고 있더군요.

template<class _Fx,
class... _Types> inline
_Binder<_Unforced, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args)
{ // bind a callable object with an implicit return type
return (_Binder<_Unforced, _Fx, _Types...>(
_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...));
}

소켓의 bind를 사용하기 위해 범위 확인 연산자 :: 를 지정해주면 됩니다.

if(::bind(sock,(SOCKADDR*)&adr,iSize) != SOCKET_ERROR)

이 블로그의 인기 게시물

Unity3D Prime31 처럼 자신만의 안드로이드 플러그인을 만들어보자

CMake Windows에 설치하기

Unity3D iOS Plugin 만들어 연동하기