qicosmos / rest_rpc

modern C++(C++11), simple, easy to use rpc framework
MIT License
1.66k stars 365 forks source link

不能在VS2013中使用 #114

Open LukeMouse opened 7 months ago

LukeMouse commented 7 months ago

虽然VS2013没有完整的支持C++11,cplusplus_14.h里面对VS2013的兼容没有起到作用,很多constexptr也不能使用,作者还会支持VS2013吗?

qicosmos commented 7 months ago

问题应该不大,我好奇的是为啥不升级msvc呢,13都是10年前的版本了,很老了。

LukeMouse commented 7 months ago

我们的用户都是传统的国企,甚至还有人在用vs2010,更有甚者有的部门居然在用vc6开发,希望能用上您的库,谢谢!!!

qicosmos commented 6 months ago

能把具体的编译错误贴出来看看吗?

LukeMouse commented 6 months ago

vs2013中不支持constexpr,根据网上的说法替换成const后,编译example client 报如下错误: 1>------ Rebuild All started: Project: client, Configuration: Debug Win32 ------ 1> main.cpp 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(11): error C2039: 'index_sequence' : is not a member of 'std' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(11): error C2061: syntax error : identifier 'index_sequence' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(10): error C3547: template parameter 'Idx' cannot be used because it follows a template parameter pack and cannot be deduced from the function parameters of 'rest_rpc::for_each' 1> c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(9) : see declaration of 'Idx' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(17): error C2039: 'index_sequence' : is not a member of 'std' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(17): error C2061: syntax error : identifier 'index_sequence' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(16): error C3547: template parameter 'Idx' cannot be used because it follows a template parameter pack and cannot be deduced from the function parameters of 'rest_rpc::for_each_i' 1> c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(15) : see declaration of 'Idx' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(82): error C2039: 'index_sequence' : is not a member of 'std' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(82): error C2065: 'index_sequence' : undeclared identifier 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(82): error C2143: syntax error : missing ')' before '...' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(82): error C2059: syntax error : ')' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(89): error C2143: syntax error : missing ';' before '{' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(89): error C2447: '{' : missing function header (old-style formal list?) 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(96): error C2039: 'index_sequence' : is not a member of 'std' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(96): error C2061: syntax error : identifier 'index_sequence' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(112): error C2039: 'tuple_element_t' : is not a member of 'std' 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(112): error C2061: syntax error : identifier 'tuple_element_t' 原因是vs2013中没有index_sequence的定义,cplusplus_14.h有这个定义,但是不好使,不熟悉模板,不知道这块怎么改,谢谢!

LukeMouse commented 6 months ago

把 #if __cplusplus == 201103L 改成 #if _MSC_VER == 1800后,删除noexcept【vs2013不支持】,再次编译example客户端代码报错如下: 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\cplusplus_14.h(63): error C2386: 'enable_if_t' : a symbol with this name already exists in the current scope 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\cplusplus_14.h(65): error C2386: 'remove_const_t' : a symbol with this name already exists in the current scope 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\cplusplus_14.h(68): error C2386: 'remove_reference_t' : a symbol with this name already exists in the current scope 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\cplusplus_14.h(73): error C2386: 'decay_t' : a symbol with this name already exists in the current scope 1>c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(35): fatal error C1903: unable to recover from previous error(s); stopping compilation 1> c:\users\administrator\desktop\rest_rpc\include\rest_rpc\meta_util.hpp(43) : see reference to class template instantiation 'rest_rpc::function_traits<Ret(Arg,Args...)>' being compiled

qicosmos commented 5 months ago

拉一下最新代码试一下。

LukeMouse commented 4 months ago

还是不行,在一些编译错误的文件中,我增加了

if _MSC_VER < 1900

define constexpr const

define noexcept

endif

解决了2013不支持constexpr和noexcept的问题, 通过在构造函数中初始化的方式解决了 std::atomic_bool hasconnected = {false};的编译错误; 但是再次编译还是提示: error C2248: 'msgpack::v1::sbuffer::sbuffer' : cannot access private member declared in class 'msgpack::v1::sbuffer' 这好像是因为msgpack兼容2013的问题

qicosmos commented 4 months ago

换新版本的msvc吧