Thanks for reporting this issue. I've resolved it as By Design because the libraries are behaving correctly. Winsock's bind() is declared in the global namespace. <functional>'s bind() is declared in namespace std (I am skipping over some subtleties that are not relevant here). They coexist happily despite having the same name, because that's what namespaces are for.
However, when you say "using namespace std;", you make all of the names in namespace std available to unqualified name lookup. Therefore, both Winsock's bind() and <functional>'s bind() are considered during overload resolution, and because <functional>'s bind() is a template, it will usually win, but fail to compile later. That's why the compiler error here is so horrible.
To fix this, call ::bind() when you want Winsock's bind(), and std::bind() if you ever want <functional>'s bind(). When you call ::bind(), you're asking the compiler to look in the global namespace only.