プロジェクトを Visual Studio 2012 でコンパイルすると、次の奇妙なエラーが発生します。
error C2562: 'std::_Callable_obj<_Ty>::_ApplyX' : 'void' function returning a value C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap
ジャンプするxrefwrap
と、エラーは次の行から発生します。
_VARIADIC_EXPAND_0X(_APPLYX_CALLOBJ, , , , )
私のコードは、Linux 上の GCC で正常にコンパイルされます。さらに、コンパイラは、このエラーの原因に関する情報を提供しません。
このエラーの原因は何ですか? このコードがソースである可能性があると思いますが、それは私がstd::ref
そこで使用しているからです:
_listener.addSocket(clientSock, std::bind(&Client::handleReceive, &client,
_1, std::ref(*this)),
std::bind(&Lounge::handleClientDisconnect, this,
std::cref(client)));
バインドしているメンバー関数の 2 つのシグネチャを次に示します。
bool Client::handleReceive(std::shared_ptr<TBSystem::network::sockets::ITcpSocket>& socket,
Lounge& lounge);
void Lounge::handleClientDisconnect(const Client& c);
で値を返しますClient::handleReceive
。
そして、これはstd::function
私が呼び出すときに使用している2つのプロトタイプですaddSocket
:
typedef std::function<bool (std::shared_ptr<sockets::ITcpSocket>&)> readCallback;
typedef std::function<void ()> disconnectCallback;