1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list(1194): error C2451: conditional expression of type 'void' is illegal
1>          Expressions of type void cannot be converted to other types
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list(1188) : while compiling class template member function 'void std::list<_Ty>::remove(const _Ty &)'
1>          with
1>          [
1>              _Ty=ServerLoginResponseCallback
1>          ]
1>          c:\users\shawn\edu\csclient\ConfigurationServerClient.h(56) : see reference to class template instantiation 'std::list<_Ty>' being compiled
1>          with
1>          [
1>              _Ty=ServerLoginResponseCallback
1>          ]


这是生成错误的代码...

typedef std::shared_ptr<protocols::ServerLoginResponse> ServerLoginResponsePtr;
typedef std::function<void (ServerLoginResponsePtr)> ServerLoginResponseCallback;
typedef std::list<ServerLoginResponseCallback> ServerLoginResponseCallbackList;


因此,我们有一个函子列表,这些函子返回void并采用了shared_ptr类型的参数。有谁知道为什么MSVC编译器有麻烦?

最佳答案

看来您在实例化方面遇到了问题。我刚刚尝试重现您的错误,但我的MSVC成功地编译了此代码。

请向我们显示更多代码))例如,向我们显示创建后如何使用此列表。

关于c++ - MSVC 2010模板编译器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3348419/

10-17 01:26