msgpack / msgpack-c

MessagePack implementation for C and C++ / msgpack.org[C/C++]
Other
3.01k stars 875 forks source link

Cannot convert vector<int> to variant #1092

Closed qiangxinglin closed 1 year ago

qiangxinglin commented 1 year ago
std::map<std::string, msgpack::type::variant> msg_dict;
msg_dict["size"] = std::vector<int>{1920, 1080};

throws MSVC errors:

error C2665: “boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>>::variant”: none of the 3 overloads could convert all the argument types

Possible either : “boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>>::variant(boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>> &&) noexcept()”

Or: “boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>>::variant(const boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>> &)”

Or : “boost::variant<msgpack::v1::type::nil_t,bool,int64_t,uint64_t,double,std::string,boost::string_ref,std::vector<char,std::allocator>,msgpack::v1::type::raw_ref,msgpack::v1::type::ext,msgpack::v1::type::ext_ref,boost::recursive_wrapper<std::vector<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::allocator<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>,boost::recursive_wrapper<std::map<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>,boost::recursive_wrapper<std::multimap<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,std::less<msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>,std::allocator<std::pair<const msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>,msgpack::v1::type::basic_variant<std::string,std::vector<char,std::allocator>,msgpack::v1::type::ext>>>>>>::variant(void) noexcept()”

redboltz commented 1 year ago

msgpack::variant is a type that is mapped to https://github.com/msgpack/msgpack/blob/master/spec.md. So only the following types are supported https://github.com/msgpack/msgpack-c/blob/cpp_master/include/msgpack/v1/adaptor/boost/msgpack_variant.hpp#L53

It is slightly different from std::variant.