MessagePack implementation for C and C++ / msgpack.org[C/C++]

Overview

msgpack for C/C++

It's like JSON but smaller and faster.

Overview

MessagePack is an efficient binary serialization format, which lets you exchange data among multiple languages like JSON, except that it's faster and smaller. Small integers are encoded into a single byte and short strings require only one extra byte in addition to the strings themselves.

C Library

See c_master

C++ Library

See cpp_master

Documentation

You can get additional information including the tutorial on the wiki.

Contributing

msgpack-c is developed on GitHub at msgpack/msgpack-c. To report an issue or send a pull request, use the issue tracker.

Here's the list of great contributors.

License

msgpack-c is licensed under the Boost Software License, Version 1.0. See the LICENSE_1_0.txt file for details.

Comments
  • Improve CMake package generation

    Improve CMake package generation

    At the moment the CMake package config is useless below CMake version 3.0 and should be disabled. Additionally exported targets should be prefixed by a namespace msgpack::.

    opened by herbrechtsmeier 57
  • Better support for str/bin discrepancy

    Better support for str/bin discrepancy

    The new spec introduces some new types for str/bin. Support for these types can be improved.

    • There should be some way from the C API to deliberately emit a str vs a bin type. Currently the only pack function in userspace is msg_pack_raw, which as best as I can tell always emits str.
    • There should be some way to detect whether a msgpack_object was decoded from a str or a bin type. Currently both str and bin formats get decoded to an object with object.type==MSGPACK_OBJECT_RAW.

    The first problem is simple enough. As to the second problem, the decode logic seems be buried in macro hell, and I'm not really confident enough that I understand the existing flow to make an attempt.

    This bug is important enough that in the absence of a simple solution I will end up writing a new library in the target language.

    opened by drewcrawford 36
  • Modernize codebase

    Modernize codebase

    • Enhance CMakeLists.txt files.
    • Move to Boost Test from Google Test to support pre-C++11 compilers.
    • Add more configurations on CI matrix builds.
    • Add support for the following types:
      • std::array<std::byte>
      • std::span<char>
      • std::span<unsigned char>
      • std::span<std::byte>

    I plan to submit one more PR to add full support for std::span - a nice non-owning data range wrapper from C++20.

    C++ 
    opened by kovdan01 34
  • alignment trap on ARM

    alignment trap on ARM

    Hi, msgpackers:

    I'm trying "zmq + msgpack-c" to make some prototype on our embedded systems. In principal, we have one device based on PowerPC, and another on ARM (armvt5). It works fine on PowerPC. However, if I send a message between two processes on ARM or send a message from PowerPC to ARM, I will see the "alignment trap" prints, like below.

    Alignment trap: process (601) PC=0x000155d4 Instr=0xe1cc20d8 Address=0xb510450c FSR 0x001

    Then, I want to know exactly where causes the problem, so I change the ARM build from release mode (-O2) to debug mode (no optimizations at all, so nothing). Surprisingly, the "alignment trap" prints do not show up.

    I'm a bit stuck now and do not know which way to go. Any suggestions? Thanks!

    opened by chshaob1 29
  • Include ordering results in compilation errors

    Include ordering results in compilation errors

    Here is a small sample program that shows how include ordering can result in a significant amount of compiler errors. Forcing a strict ordering on includes seems to be a very poor approach:

    #include <msgpack_fwd.hpp>
    
    enum class color : int 
    {
        red,
        green,
        blue
    };
    
    #include <msgpack/object.hpp>
    MSGPACK_ADD_ENUM(color);
    //#include <msgpack/object.hpp>
    
    #include <msgpack.hpp>
    
    int main(int argc, char** argv)
    {
        msgpack::object o(color::red);
        return 0;
    }
    

    If you compile this program you will get the following output. Swapping out the msgpack/object.hpp includes will get rid of the errors.

    [email protected]:build$ g++ -I ../third-party/msgpack-c/include -std=c++11 ../main.cpp -o main
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp: In instantiation of ‘msgpack::v1::object::object(const T&) [with T = color]’:
    ../main.cpp:18:33:   required from here
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: error: no matching function for call to ‘operator<<(msgpack::v1::object&, const color&)’
         msgpack::operator<<(*this, v);
                                     ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note: candidates are:
    ../third-party/msgpack-c/include/msgpack/object.hpp:276:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const T&)
     inline void operator<< (msgpack::object::with_zone& o, const T& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:276:13: note:   template argument deduction/substitution failed:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:199:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const msgpack::v1::object&)
     inline void operator<< (msgpack::object::with_zone& o, const msgpack::object& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:199:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/object.hpp:269:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const msgpack::v1::object::with_zone&)
     inline void operator<< (msgpack::object::with_zone& o, const msgpack::object::with_zone& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:269:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/object.hpp:564:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::object&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const msgpack::object& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:564:33: note:   template argument deduction/substitution failed:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:631:26: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::object::with_zone&)
     msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const msgpack::object::with_zone& v)
                              ^
    ../third-party/msgpack-c/include/msgpack/object.hpp:631:26: note:   template argument deduction/substitution failed:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/object.hpp:23:0,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/pack.hpp:144:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const T&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const T& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/pack.hpp:144:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:141:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, char)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, char v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:141:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:146:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, signed char)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed char v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:146:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:150:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, short int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed short v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:150:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:154:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed int v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:154:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:158:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, long int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:158:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:162:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, long long int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long long v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:162:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:167:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, unsigned char)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned char v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:167:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:171:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, short unsigned int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned short v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:171:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:175:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, unsigned int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned int v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:175:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:179:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, long unsigned int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:179:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:183:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, long long unsigned int)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long long v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:183:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:23:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:5,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:187:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, char)
     inline void operator<< (msgpack::object& o, char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:187:13: note:   no known conversion for argument 2 from ‘const color’ to ‘char’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:191:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, signed char)
     inline void operator<< (msgpack::object& o, signed char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:191:13: note:   no known conversion for argument 2 from ‘const color’ to ‘signed char’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:203:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, short int)
     inline void operator<< (msgpack::object& o, signed short v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:203:13: note:   no known conversion for argument 2 from ‘const color’ to ‘short int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:215:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, int)
     inline void operator<< (msgpack::object& o, signed int v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:215:13: note:   no known conversion for argument 2 from ‘const color’ to ‘int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:227:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, long int)
     inline void operator<< (msgpack::object& o, signed long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:227:13: note:   no known conversion for argument 2 from ‘const color’ to ‘long int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:239:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, long long int)
     inline void operator<< (msgpack::object& o, signed long long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:239:13: note:   no known conversion for argument 2 from ‘const color’ to ‘long long int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:251:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, unsigned char)
     inline void operator<< (msgpack::object& o, unsigned char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:251:13: note:   no known conversion for argument 2 from ‘const color’ to ‘unsigned char’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:254:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, short unsigned int)
     inline void operator<< (msgpack::object& o, unsigned short v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:254:13: note:   no known conversion for argument 2 from ‘const color’ to ‘short unsigned int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:257:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, unsigned int)
     inline void operator<< (msgpack::object& o, unsigned int v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:257:13: note:   no known conversion for argument 2 from ‘const color’ to ‘unsigned int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:260:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, long unsigned int)
     inline void operator<< (msgpack::object& o, unsigned long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:260:13: note:   no known conversion for argument 2 from ‘const color’ to ‘long unsigned int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:263:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, long long unsigned int)
     inline void operator<< (msgpack::object& o, unsigned long long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:263:13: note:   no known conversion for argument 2 from ‘const color’ to ‘long long unsigned int’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:268:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, char)
     inline void operator<< (msgpack::object::with_zone& o, char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:268:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:272:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, signed char)
     inline void operator<< (msgpack::object::with_zone& o, signed char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:272:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:275:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, short int)
     inline void operator<< (msgpack::object::with_zone& o, signed short v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:275:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:278:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, int)
     inline void operator<< (msgpack::object::with_zone& o, signed int v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:278:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:281:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, long int)
     inline void operator<< (msgpack::object::with_zone& o, signed long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:281:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:284:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const long long int&)
     inline void operator<< (msgpack::object::with_zone& o, const signed long long& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:284:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:288:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, unsigned char)
     inline void operator<< (msgpack::object::with_zone& o, unsigned char v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:288:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:291:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, short unsigned int)
     inline void operator<< (msgpack::object::with_zone& o, unsigned short v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:291:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:294:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, unsigned int)
     inline void operator<< (msgpack::object::with_zone& o, unsigned int v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:294:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:297:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, long unsigned int)
     inline void operator<< (msgpack::object::with_zone& o, unsigned long v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:297:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:300:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const long long unsigned int&)
     inline void operator<< (msgpack::object::with_zone& o, const unsigned long long& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/int.hpp:300:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:2:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:37:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const bool&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const bool& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:37:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:2:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:44:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, bool)
     inline void operator<< (msgpack::object& o, bool v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:44:13: note:   no known conversion for argument 2 from ‘const color’ to ‘bool’
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:50:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, bool)
     inline void operator<< (msgpack::object::with_zone& o, bool v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/bool.hpp:50:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:3:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:32:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const char*)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const char* v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:32:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:3:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:40:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const char*)
     inline void operator<< (msgpack::object::with_zone& o, const char* v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:40:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:50:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, const char*)
     inline void operator<< (msgpack::object& o, const char* v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:50:13: note:   no known conversion for argument 2 from ‘const color’ to ‘const char*’
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:59:24: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, char*)
     inline packer<Stream>& operator<< (packer<Stream>& o, char* v)
                            ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:59:24: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:3:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:64:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, char*)
     inline void operator<< (object::with_zone& o, char* v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:64:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:69:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, char*)
     inline void operator<< (object& o, char* v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/char_ptr.hpp:69:13: note:   no known conversion for argument 2 from ‘const color’ to ‘char*’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:4:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/deque.hpp:46:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::deque<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::deque<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/deque.hpp:46:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:4:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/deque.hpp:58:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::deque<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::deque<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/deque.hpp:58:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:87:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_int8&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int8& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:87:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:91:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_int16&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int16& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:91:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:95:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_int32&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int32& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:95:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:99:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_int64&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int64& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:99:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:104:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_uint8&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint8& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:104:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:108:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_uint16&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint16& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:108:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:112:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_uint32&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint32& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:112:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:116:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const fix_uint64&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint64& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:116:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:5:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:120:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_int8)
     inline void operator<< (msgpack::object& o, type::fix_int8 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:120:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_int8 {aka msgpack::v1::type::fix_int<signed char>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:132:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_int16)
     inline void operator<< (msgpack::object& o, type::fix_int16 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:132:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_int16 {aka msgpack::v1::type::fix_int<short int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:144:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_int32)
     inline void operator<< (msgpack::object& o, type::fix_int32 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:144:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_int32 {aka msgpack::v1::type::fix_int<int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:156:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_int64)
     inline void operator<< (msgpack::object& o, type::fix_int64 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:156:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_int64 {aka msgpack::v1::type::fix_int<long int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:169:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_uint8)
     inline void operator<< (msgpack::object& o, type::fix_uint8 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:169:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_uint8 {aka msgpack::v1::type::fix_int<unsigned char>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:172:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_uint16)
     inline void operator<< (msgpack::object& o, type::fix_uint16 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:172:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_uint16 {aka msgpack::v1::type::fix_int<short unsigned int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:175:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_uint32)
     inline void operator<< (msgpack::object& o, type::fix_uint32 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:175:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_uint32 {aka msgpack::v1::type::fix_int<unsigned int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:178:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::fix_uint64)
     inline void operator<< (msgpack::object& o, type::fix_uint64 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:178:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::fix_uint64 {aka msgpack::v1::type::fix_int<long unsigned int>}’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:182:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_int8)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_int8 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:182:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:185:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_int16)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_int16 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:185:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:188:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_int32)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_int32 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:188:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:191:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_int64)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_int64 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:191:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:195:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_uint8)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_uint8 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:195:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:198:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_uint16)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_uint16 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:198:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:201:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_uint32)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_uint32 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:201:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:204:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::fix_uint64)
     inline void operator<< (msgpack::object::with_zone& o, type::fix_uint64 v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/fixint.hpp:204:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:6:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:50:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const float&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const float& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:50:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:6:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:75:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const double&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const double& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:75:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:6:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:82:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, float)
     inline void operator<< (msgpack::object& o, float v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:82:13: note:   no known conversion for argument 2 from ‘const color’ to ‘float’
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:88:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, double)
     inline void operator<< (msgpack::object& o, double v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:88:13: note:   no known conversion for argument 2 from ‘const color’ to ‘double’
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:94:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, float)
     inline void operator<< (msgpack::object::with_zone& o, float v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:94:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:97:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, double)
     inline void operator<< (msgpack::object::with_zone& o, double v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/float.hpp:97:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:8:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/list.hpp:46:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::list<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::list<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/list.hpp:46:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:8:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/list.hpp:58:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::list<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::list<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/list.hpp:58:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:66:33: note: template<class Stream, class K, class V> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::type::assoc_vector<K, V>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::assoc_vector<K,V>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:66:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:79:13: note: template<class K, class V> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const msgpack::v1::type::assoc_vector<K, V>&)
     inline void operator<< (msgpack::object::with_zone& o, const type::assoc_vector<K,V>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:79:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:126:33: note: template<class Stream, class K, class V> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::map<K, V>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::map<K,V>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:126:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:139:13: note: template<class K, class V> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::map<K, V>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::map<K,V>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:139:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:180:33: note: template<class Stream, class K, class V> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::multimap<K, V>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multimap<K,V>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:180:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:9:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:193:13: note: template<class K, class V> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::multimap<K, V>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::multimap<K,V>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/map.hpp:193:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/msgpack_tuple.hpp:26:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:18,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp:123:32: note: template<class Stream, class ... Args> const msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::type::tuple<Args ...>&)
     const msgpack::packer<Stream>& operator<< (
                                    ^
    ../third-party/msgpack-c/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp:123:32: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/adaptor/msgpack_tuple.hpp:26:0,
                     from ../third-party/msgpack-c/include/msgpack/type.hpp:18,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp:199:13: note: template<class ... Args> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const msgpack::v1::type::tuple<Args ...>&)
     inline void operator<< (
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp:199:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:10:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:42:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::type::nil&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::nil&)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:42:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:10:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:48:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, msgpack::v1::type::nil)
     inline void operator<< (msgpack::object& o, type::nil)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:48:13: note:   no known conversion for argument 2 from ‘const color’ to ‘msgpack::v1::type::nil’
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:53:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, msgpack::v1::type::nil)
     inline void operator<< (msgpack::object::with_zone& o, type::nil v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/nil.hpp:53:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:11:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/pair.hpp:40:33: note: template<class Stream, class T1, class T2> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::pair<_Tp1, _Tp2>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::pair<T1, T2>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/pair.hpp:40:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:11:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/pair.hpp:49:13: note: template<class T1, class T2> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::pair<_T1, _T2>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::pair<T1, T2>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/pair.hpp:49:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:12:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:76:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const msgpack::v1::type::raw_ref&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const msgpack::type::raw_ref& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:76:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:12:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:83:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, const msgpack::v1::type::raw_ref&)
     inline void operator<< (msgpack::object& o, const msgpack::type::raw_ref& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:83:13: note:   no known conversion for argument 2 from ‘const color’ to ‘const msgpack::v1::type::raw_ref&’
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:90:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const msgpack::v1::type::raw_ref&)
     inline void operator<< (msgpack::object::with_zone& o, const msgpack::type::raw_ref& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/raw.hpp:90:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:13:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:47:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::set<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::set<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:47:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:13:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:59:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::set<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::set<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:59:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:13:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:97:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::multiset<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multiset<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:97:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:13:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:109:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::multiset<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::multiset<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/set.hpp:109:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:14:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:48:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const string&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::string& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:48:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:14:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:56:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const string&)
     inline void operator<< (msgpack::object::with_zone& o, const std::string& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:56:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:66:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, const string&)
     inline void operator<< (msgpack::object& o, const std::string& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/string.hpp:66:13: note:   no known conversion for argument 2 from ‘const color’ to ‘const string& {aka const std::basic_string<char>&}’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:15:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector.hpp:50:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::vector<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::vector<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector.hpp:50:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:15:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector.hpp:62:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::vector<_RealType>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::vector<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector.hpp:62:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:16:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_bool.hpp:46:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::vector<bool>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::vector<bool>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_bool.hpp:46:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:16:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_bool.hpp:56:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::vector<bool>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::vector<bool>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_bool.hpp:56:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:17:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:50:33: note: template<class Stream> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::vector<char>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::vector<char>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:50:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:17:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:59:13: note: void msgpack::v1::operator<<(msgpack::v1::object&, const std::vector<char>&)
     inline void operator<< (msgpack::object& o, const std::vector<char>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:59:13: note:   no known conversion for argument 2 from ‘const color’ to ‘const std::vector<char>&’
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:67:13: note: void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::vector<char>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::vector<char>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/vector_char.hpp:67:13: note:   no known conversion for argument 1 from ‘msgpack::v1::object’ to ‘msgpack::v1::object::with_zone&’
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:28:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array.hpp:50:33: note: template<class Stream, class T, long unsigned int N> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::array<_Tp, _Nm>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<T, N>& v) {
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array.hpp:50:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:28:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array.hpp:58:13: note: template<class T, long unsigned int N> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::array<_Tp, _Nm>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::array<T, N>& v) {
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array.hpp:58:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:29:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:51:33: note: template<class Stream, long unsigned int N> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::array<char, N>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<char, N>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:51:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:29:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:61:13: note: template<long unsigned int N> void msgpack::v1::operator<<(msgpack::v1::object&, const std::array<char, N>&)
     inline void operator<< (msgpack::object& o, const std::array<char, N>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:61:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   mismatched types ‘const std::array<char, N>’ and ‘const color’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:29:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:70:13: note: template<long unsigned int N> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::array<char, N>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::array<char, N>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/array_char.hpp:70:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:30:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/forward_list.hpp:46:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::forward_list<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::forward_list<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/forward_list.hpp:46:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:30:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/forward_list.hpp:55:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::forward_list<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::forward_list<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/forward_list.hpp:55:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:31:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/tuple.hpp:61:39: note: template<class Stream, class ... Args> const msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::tuple<_Elements ...>&)
     inline const msgpack::packer<Stream>& operator<< (
                                           ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/tuple.hpp:61:39: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:31:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/tuple.hpp:138:13: note: template<class ... Args> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::tuple<_Elements ...>&)
     inline void operator<< (
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/tuple.hpp:138:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:32:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:48:33: note: template<class Stream, class K, class V> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::unordered_map<K, V>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_map<K,V>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:48:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:32:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:61:13: note: template<class K, class V> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::unordered_map<K, V>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::unordered_map<K,V>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:61:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:32:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:102:33: note: template<class Stream, class K, class V> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::unordered_multimap<K, V>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multimap<K,V>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:102:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:32:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:115:13: note: template<class K, class V> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::unordered_multimap<K, V>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multimap<K,V>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_map.hpp:115:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:33:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:47:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::unordered_set<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_set<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:47:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:33:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:59:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::unordered_set<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::unordered_set<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:59:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:33:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:97:33: note: template<class Stream, class T> msgpack::v1::packer<Stream>& msgpack::v1::operator<<(msgpack::v1::packer<Stream>&, const std::unordered_multiset<T>&)
     inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multiset<T>& v)
                                     ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:97:33: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   ‘msgpack::v1::object’ is not derived from ‘msgpack::v1::packer<Stream>’
         msgpack::operator<<(*this, v);
                                     ^
    In file included from ../third-party/msgpack-c/include/msgpack/type.hpp:33:0,
                     from ../third-party/msgpack-c/include/msgpack/object.hpp:710,
                     from ../main.cpp:2:
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:109:13: note: template<class T> void msgpack::v1::operator<<(msgpack::v1::object::with_zone&, const std::unordered_multiset<T>&)
     inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multiset<T>& v)
                 ^
    ../third-party/msgpack-c/include/msgpack/adaptor/cpp11/unordered_set.hpp:109:13: note:   template argument deduction/substitution failed:
    In file included from ../main.cpp:2:0:
    ../third-party/msgpack-c/include/msgpack/object.hpp:491:33: note:   cannot convert ‘*(msgpack::v1::object*)this’ (type ‘msgpack::v1::object’) to type ‘msgpack::v1::object::with_zone&’
         msgpack::operator<<(*this, v);
                                     ^
    
    opened by davidchappelle 29
  • object_with_zone.system_clock_impl_min fails (undefined behavior)

    object_with_zone.system_clock_impl_min fails (undefined behavior)

    The Debian armhf build of 3.3.0 is failing the mentioned test.

    Since it's using EXPECT_TRUE() instead of EXPECT_EQ(), there's not much diagnostic information in the build log (although there are a lot of warnings in the build). I was able to reproduce the issue on one of our porter systems, and changed the assertion to

    EXPECT_EQ(obj.as<std::chrono::system_clock::time_point>(), v);
    

    I was hoping that would give more clarity about why the test failed, but instead the test passes whenever I run with that change.

    If it helps, I could provide the annotated assembly that's generated for that test function.

    opened by jamessan 26
  • Build failure on Xcode 9.3 with C++17 optional header.

    Build failure on Xcode 9.3 with C++17 optional header.

    Under Xcode 9.3, I'm not able to build msgpack-c because Xcode currently has C++17's optional under the experimental namespace.

    /msgpack/include/msgpack/v1/adaptor/cpp17/optional.hpp

    Line 19: #include <optional>

    Xcode fails with the error "optional not found".

    In my Xcode project, I have the following build settings:

    • C++ Language Dialect: C++17 [-std=c++17]
    • C++ Standard Library: libc++(LLVM...)
    opened by kennycarruthers 19
  • Support SAX-style unpack API

    Support SAX-style unpack API

    It would be super neat if I could use msgpack as a pure wire format reader/visitor without having to create a result msgpack::object.

    For instance, my class msgpack_from_json_handler can be passed to rapidjson::Reader::Parse() as a parameter and will be called back on every element in the JSON tree.

    With unpack_reference_func(), I can avoid copying all string data with a zone. However, I still have to let msgpack generate a msgpack::object tree, with allocations depending on the non-leaf objects / depth of the tree. In some situations, a simple visitor pattern would work better.

    Here are two example use cases:

    • Converting msgpack to a custom type/variant without allocations ("use case 1")

    Elvis's library deals mostly with JSON data. Internally he stores much of his data as RapidJSON variant values. He decides he also wants to support serialialization to and from msgpack. He needs to process lots of data and packing/unpacking is a hot code path, so it needs to perform as fast as possible. For serializing to msgpack, he can use pack()/pack_map()/pack_array() functions and json-msgpack. He also wants to be able to read directly from a msgpack buffer into a RapidJSON variant, skipping the intermediate step of the msgpack::object because his variant can represent the same data in a format that the rest of his code uses.

    [Note that instead of unpacking into JSON, one could also make use cases for msgpack::type::variant, known user-defined message objects, etc.]

    • Checking msgpack contents without unpacking them ("use case 2")

    Jakob wants to implement a SQLite extension function that checks if a serialized msgpack buffer (stored in a column of a SQLite table) contains a certain string. He wants to issue SQL queries such as, SELECT * FROM table WHERE msgpack_array_contains(msgpack_column, id) and implement the msgpack_column() extension function in the most efficient way, because it will be executed for a lot of rows. He would like to write a visitor class that gets called on each item and aborts unpacking when an array item equals id (after setting a found flag to true), or when the top-level msgpack type is something other than ARRAY. He does not care about a return type, neither msgpack::object nor any other variant.

    I think RapidJSON's SAX interface (passed to rapidjson::Reader::Parse()) would be a pretty good starting point, with minor adaptations required to suit msgpack's object model. Here's an initial draft of a (template) interface for C++ classes implementing a msgpack visitor, and a suitable unpack() overload:

    struct unpack_visitor {
        bool visit_nil();
        bool visit_boolean(bool);
        bool visit_positive_integer(uint64_t);
        bool visit_negative_integer(int64_t);
        bool visit_float(double);
        bool visit_str(const char*, uint32_t size, bool needs_copy); // still not sure why you're not using size_t
        bool visit_bin(const char*, uint32_t size, bool needs_copy);
        bool visit_ext(int8_t type, const char* data, uint32_t size, bool needs_copy);
        bool start_array(uint32_t num_elements);
        bool end_array();
        bool start_map(uint32_t num_kv_pairs);
        bool start_map_key(); // this one could be void, but since all others are bool, might as well keep this one too
        bool end_map_key();
        bool end_map();
        void parse_error(size_t parsed_offset, size_t error_offset);
        void insufficient_bytes(size_t parsed_offset, size_t error_offset);
    }
    
    template <typename UnpackVisitor>
    bool unpack(const char* data, size_t len, size_t& off, UnpackVisitor&);
    

    [Edit: changed begin_*() to start_*() as RapidJSON, Qt and the Java SAX API all use start as well.]

    I prepended visit_ to single-value functions so we don't get issues with keywords (bool float(double);) or the Apple nil define, and msgpack's lower-case naming can still be employed.

    The bool return value of all of those represents a successful parse (true for "continue parsing", false for "parse error"). The unpack() function is specified in a way that an exception-less interface can be built with it and all current unpack() functions can be implemented with this unpack() overload and a visitor:

    • The zone and stack of result msgpack objects can be members of the visitor object, which uses/writes/manages them.
    • Stream-level errors (parse_error and insufficient_bytes) are called as error functions in the visitor, which can decide to either throw or store them as state in the visitor object (and do custom error handling afterwards).
      • For use case 2: A caller who does avoids throwing exceptions can distinguish between legitimate parse errors and "found, now abort" early return situations by determining whether error functions have been called. If I know that my object is valid msgpack, an early return will save me some reads and processing time.
      • I chose to include offset parameters for the error functions, because it could be useful for error reporting (invalid bytes range from parsed_offset to error_offset). error_offset is the same value as the off parameter in unpack(). When used within an unpacker, parsed_offset equals parsed_size() and error_offset equals parsed_size() + nonparsed_size() (assuming I understand the purpose of these values correctly).
    • unpack_limit and size_overflow errors can be thrown by the visitor functions themselves.
    • unpack_reference_func can be called by visit_str(), visit_bin() and visit_ext().
      • user_data can be a member of the visitor class.
    • unpacker can't be implemented on top of this overload because unpack() doesn't take a parse context object. (The visitor object likely contains a stack of msgpack objects, but does not tell the calling parser about the stack depth. That's a good thing because it makes the visitor object more lightweight and easier to implement if no stack information is necessary.) However, it should be possible to use the same visitor object for unpacker as for regular unpack() overloads, assuming that insufficient_bytes() doesn't throw.
    • The off result parameter might be important for error messages. It's required here in addition to the visitor's error functions because if false is returned from a visit_*()/start_*()/end_*() function, the visitor itself does not know the current offset so it can't store it as state. Hence unpack() itself must maintain and return it.

    Personally, I find this interface a lot more approachable and easier to understand than unpack_reference_func and unpack_limit. Even though it is simpler in concept, it is also more flexible. I hope something like this can be supported by msgpack-c.

    opened by jpetso 16
  • fatal error: 'boost/predef/other/endian.h' file not found with MSGPACK_USE_BOOST OFF

    fatal error: 'boost/predef/other/endian.h' file not found with MSGPACK_USE_BOOST OFF

    Similar to #1005, there seems to be a dependency on boost/predef/other/endian.h when building with MSGPACK_USE_BOOST=OFF.

    I have reproduced this issue on both Linux and Windows.

    Minimal reproducible example: https://github.com/leocencetti/msgpack-c-issue-1025-example

    (base)[email protected]:~/Software/comm-protocol$ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DMSGPACK_USE_BOOST=OFF
    -- The C compiler identification is GNU 11.2.0
    -- The CXX compiler identification is Clang 14.0.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/cc - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found Doxygen: /usr/bin/doxygen (found version "1.9.1") found components: doxygen missing components: dot
    -- Found Python: /usr/bin/python3.10 (found version "3.10.4") found components: Interpreter 
    -- Looking for pthread.h
    -- Looking for pthread.h - found
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
    -- Found Threads: TRUE  
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/leonardo/Software/comm-protocol/build
    
    (base) [email protected]:~/Software/comm-protocol$ cmake --build build
    [1/15] Building CXX object comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolSensorDef.cpp.o
    FAILED: comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolSensorDef.cpp.o 
    /usr/bin/c++  -I/home/leonardo/Software/comm-protocol/comm_protocol/include -I"/home/leonardo/Software/comm-protocol/comm_protocol/\$<BUILD_INTERFACE:/home/leonardo/Software/comm-protocol/comm_protocol/include" -I/home/leonardo/Software/comm-protocol/build/comm_protocol -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-build/include -O3 -DNDEBUG -MD -MT comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolSensorDef.cpp.o -MF comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolSensorDef.cpp.o.d -o comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolSensorDef.cpp.o -c /home/leonardo/Software/comm-protocol/comm_protocol/src/commProtocolSensorDef.cpp
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/src/commProtocolSensorDef.cpp:11:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolSensorDef.h:15:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack.hpp:10:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack_decl.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/pack_decl.hpp:15:
    /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/sysdep.hpp:102:10: fatal error: 'boost/predef/other/endian.h' file not found
    #include <boost/predef/other/endian.h>
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    [2/15] Building CXX object comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolHandle.cpp.o
    FAILED: comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolHandle.cpp.o 
    /usr/bin/c++  -I/home/leonardo/Software/comm-protocol/comm_protocol/include -I"/home/leonardo/Software/comm-protocol/comm_protocol/\$<BUILD_INTERFACE:/home/leonardo/Software/comm-protocol/comm_protocol/include" -I/home/leonardo/Software/comm-protocol/build/comm_protocol -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-build/include -O3 -DNDEBUG -MD -MT comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolHandle.cpp.o -MF comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolHandle.cpp.o.d -o comm_protocol/CMakeFiles/comm_protocol.dir/src/commProtocolHandle.cpp.o -c /home/leonardo/Software/comm-protocol/comm_protocol/src/commProtocolHandle.cpp
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/src/commProtocolHandle.cpp:12:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolHandle.h:15:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolSensorDef.h:15:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack.hpp:10:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack_decl.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/pack_decl.hpp:15:
    /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/sysdep.hpp:102:10: fatal error: 'boost/predef/other/endian.h' file not found
    #include <boost/predef/other/endian.h>
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    [4/15] Building CXX object comm_protocol/tests/unit/CMakeFiles/test_sensor_def.dir/test_sensor_def.cpp.o
    FAILED: comm_protocol/tests/unit/CMakeFiles/test_sensor_def.dir/test_sensor_def.cpp.o 
    /usr/bin/c++  -I/home/leonardo/Software/comm-protocol/comm_protocol/include -I"/home/leonardo/Software/comm-protocol/comm_protocol/\$<BUILD_INTERFACE:/home/leonardo/Software/comm-protocol/comm_protocol/include" -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-build/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googletest/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googletest -O3 -DNDEBUG -MD -MT comm_protocol/tests/unit/CMakeFiles/test_sensor_def.dir/test_sensor_def.cpp.o -MF comm_protocol/tests/unit/CMakeFiles/test_sensor_def.dir/test_sensor_def.cpp.o.d -o comm_protocol/tests/unit/CMakeFiles/test_sensor_def.dir/test_sensor_def.cpp.o -c /home/leonardo/Software/comm-protocol/comm_protocol/tests/unit/test_sensor_def.cpp
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/tests/unit/test_sensor_def.cpp:3:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolSensorDef.h:15:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack.hpp:10:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack_decl.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/pack_decl.hpp:15:
    /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/sysdep.hpp:102:10: fatal error: 'boost/predef/other/endian.h' file not found
    #include <boost/predef/other/endian.h>
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    [6/15] Building CXX object comm_protocol/tests/unit/CMakeFiles/test_comm_protocol_handle.dir/test_comm_protocol_handle.cpp.o
    FAILED: comm_protocol/tests/unit/CMakeFiles/test_comm_protocol_handle.dir/test_comm_protocol_handle.cpp.o 
    /usr/bin/c++  -I/home/leonardo/Software/comm-protocol/comm_protocol/include -I"/home/leonardo/Software/comm-protocol/comm_protocol/\$<BUILD_INTERFACE:/home/leonardo/Software/comm-protocol/comm_protocol/include" -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include -I/home/leonardo/Software/comm-protocol/build/_deps/msgpackc-build/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googletest/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googletest -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googlemock/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/googlemock -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src/include -isystem /home/leonardo/Software/comm-protocol/build/_deps/gtest-src -O3 -DNDEBUG -MD -MT comm_protocol/tests/unit/CMakeFiles/test_comm_protocol_handle.dir/test_comm_protocol_handle.cpp.o -MF comm_protocol/tests/unit/CMakeFiles/test_comm_protocol_handle.dir/test_comm_protocol_handle.cpp.o.d -o comm_protocol/tests/unit/CMakeFiles/test_comm_protocol_handle.dir/test_comm_protocol_handle.cpp.o -c /home/leonardo/Software/comm-protocol/comm_protocol/tests/unit/test_comm_protocol_handle.cpp
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/tests/unit/test_comm_protocol_handle.cpp:7:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolHandle.h:15:
    In file included from /home/leonardo/Software/comm-protocol/comm_protocol/include/comm_protocol/commProtocolSensorDef.h:15:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack.hpp:10:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/object_decl.hpp:14:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/pack_decl.hpp:13:
    In file included from /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/v1/pack_decl.hpp:15:
    /home/leonardo/Software/comm-protocol/build/_deps/msgpackc-src/include/msgpack/sysdep.hpp:102:10: fatal error: 'boost/predef/other/endian.h' file not found
    #include <boost/predef/other/endian.h>
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    [8/15] Building CXX object _deps/gtest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
    ninja: build stopped: subcommand failed.
    
    opened by leocencetti 14
  • Fail to compile after  [419877cf] commit (Added -Wconversion support for C++.)

    Fail to compile after [419877cf] commit (Added -Wconversion support for C++.)

    I see there is fixes for correct type cast.

    Previously within pack.hpp was declaraion:

    void append_buffer(const char* buf, size_t len)
        { m_stream.write(buf, len); }
    

    Now there is couple of compile time overloads to respect valid type cast when len parameter is not size_t. But, what if method ::write has overloads ? In this case &Stream::write will not be compiled (because compiler has ambiguity).

    I have class Writer with 'primary' write method

    virtual void write(const std::byte*, size_t size) = 0;

    and second 'utility' method:

    void write(const char* bytes, size_t size)
    {
    	write(reinterpret_cast<const std::byte*>(bytes), size);
    }
    

    Second method introduced especially to using with msgpack-c, but for first parameter compatibility. As temporary solution i remove second 'utility' method from my Writer class and 'fix' pack.hpp as

    void append_buffer(const char* buf, size_t len)
    {
        append_buffer(m_stream, &Stream::write, buf, len);
    }
    
    template<typename S, typename R, typename Ptr, typename Size>
    static void append_buffer(S& s, R (S::*) (Ptr, Size), const char* buf, size_t len)
    {
      s.write(reinterpret_cast<Ptr>(buf), static_cast<Size>(len));
    }
    
    opened by gviolator 14
  • Suitability of Apache license (v2)

    Suitability of Apache license (v2)

    So the concerns I raised in issue #164 turned out not to be a problem. However, more recently in the AutobahnCpp issue queue, @oberstet brought up another concern: the Apache 2.0 license isn't compatible with GPLv2. This is documented by the Apache Foundation itself: http://www.apache.org/licenses/GPL-compatibility.html

    In short, GPL projects that use Apache-licensed libraries (i.e. msgpack-c) are in a legal gray zone and might not be safe to distribute. This is because GPL's copyleft clauses extend to header-only libraries (*), but GPL's clauses are not compatible with those of the Apache license so the resulting license would be invalid.

    (*) according to one of several reasonable interpretations, including that of the FSF that wrote the GPL

    In other words, GPL projects probably shouldn't use msgpack-c, at least not its header-only C++ part. This limits the possible adoption of msgpack. Other licenses, such as the Boost license or the MIT license, do not have this problem.

    Please consider if this is something you want to fix. If you decide to take action, you need to get approvals of all copyright holders to change the license.

    opened by jpetso 14
  • When MSGPACK_USE_BOOST=OFF installed headers still depend on Boost

    When MSGPACK_USE_BOOST=OFF installed headers still depend on Boost

    For example, the installed file include/msgpack/v1/adaptor/cpp11/chrono.hpp includes boost/numeric/conversion/cast.hpp without being conditional on MSGPACK_USE_BOOST.

    Version: 4.1.2 FreeBSD 13.1

    opened by yurivict 10
  • Cannot link project using msgpack-c library

    Cannot link project using msgpack-c library

    Hello, I'm using the msgpack-c library in my project. I've been working with the msgpack_pack_str_body and msgpack_pack_int16 functions without problem. Now I want to use the msgpack_unpack_next and msgpack_object_print functions as in the "Simple program with a loop" but I get the following compilation error:

    [5/7] Linking CXX executable mqtt_tcp.elf
    FAILED: mqtt_tcp.elf 
    .
    .
    .
    b/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: esp-idf/main/libmain.a(message_pack_functions.c.obj): in function `messagepack_encoding':
    /home/esp/IoTlift/mqtt-tcp/build/../main/message_pack_functions.c:77: undefined reference to `msgpack_unpack_next'
    /home/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: /home/esp/IoTlift/mqtt-tcp/build/../main/message_pack_functions.c:81: undefined reference to `msgpack_object_print'
    /home/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: esp-idf/main/libmain.a(message_pack_functions.c.obj): in function `msgpack_unpacked_destroy':
    /home/esp/IoTlift/mqtt-tcp/build/../msgpack-c/msgpack-c-c_master/include/msgpack/unpack.h:260: undefined reference to `msgpack_zone_free'
    collect2: error: ld returned 1 exit status
    ninja: build stopped: subcommand failed.
    ninja failed with exit code 1
    

    Nevertheless, the library is included in the project and msgpack_zone_free is in "zone.h" file which is included in "unpack.h" file. How can I solve this problem?

    opened by marco711 9
  • Is it possible to only pack or unpack certain fields?

    Is it possible to only pack or unpack certain fields?

    Is there anyway to control which fields are packed or unpacked on a call by call basis?

    Can I do something like this?

    struct C
    {
        int a;
        int b;
        int c;
        MSGPACK_DEFINE_MAP(a, b, c);
    };
    
    C c1;
    c1.a = 1;
    c1.b = 2;
    c1.c = 3;
    
    msgpack::sbuffer buff;
    msgpack::packer<msgpack::sbuffer> packer(buff);
    
    // only pack fields a and b
    std::string fields1[] = { "a", "b" };
    packer.pack(c1, fields1);
    
    // only unpack field a
    std::string fields2[] = { "a" };
    msgpack::object_handle handle = msgpack::unpack(buff.data(), buff.size(), fields2);
    msgpack::object obj = handle.get();
    C c2;
    obj.convert(c2);
    
    opened by dlandtaa 1
  • 4.1.1: doxygen fails

    4.1.1: doxygen fails

    For better visibility of this issue I've switched to onluy man pages using patch

    --- a/Doxyfile~ 2021-09-01 03:10:58.000000000 +0100
    +++ b/Doxyfile  2021-09-13 14:41:57.758506584 +0100
    @@ -768,7 +768,7 @@
     # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
     # generate HTML output.
    
    -GENERATE_HTML          = YES
    +GENERATE_HTML          = NO
    
     # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
     # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    @@ -1018,7 +1018,7 @@
     # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
     # generate Latex output.
    
    -GENERATE_LATEX         = YES
    +GENERATE_LATEX         = NO
    
     # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
     # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    
    @@ -1143,7 +1143,7 @@
     # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
     # generate man pages
    
    -GENERATE_MAN           = NO
    +GENERATE_MAN           = YES
    
     # The MAN_OUTPUT tag is used to specify where the man pages will be put.
     # If a relative path is entered the value of OUTPUT_DIRECTORY will be
    
    opened by kloczek 4
  • Vulnerability: resource exhaustion attack when built with asan; denial of service when built with msan

    Vulnerability: resource exhaustion attack when built with asan; denial of service when built with msan

    When sending a message like ddff000000, msgpack-c and msgpack-cpp allocate about 96GB of memory:

    1. Load a large 32 bit int (0xff000000): https://github.com/msgpack/msgpack-c/blob/a9a48cea3a78ba661ee8096b5dab456361b0ff23/include/msgpack/unpack_template.h#L364
    2. Call callback with the large int: https://github.com/msgpack/msgpack-c/blob/a9a48cea3a78ba661ee8096b5dab456361b0ff23/include/msgpack/unpack_template.h#L145
    3. Compute allocation size (0xff000000 * 24): https://github.com/msgpack/msgpack-c/blob/a9a48cea3a78ba661ee8096b5dab456361b0ff23/src/unpack.c#L205
    4. Allocate 96GB: https://github.com/msgpack/msgpack-c/blob/a9a48cea3a78ba661ee8096b5dab456361b0ff23/src/unpack.c#L215

    In most situations, this is not a problem, because that memory isn't written to, so it's never mapped. However, if someone runs a networked program (e.g. a chat client using msgpack) under MemorySanitizer or AddressSanitizer, one of two things will happen:

    1. Under msan, the user will see ERROR: MemorySanitizer: requested allocation size 0x2000000008 exceeds maximum supported size of 0x200000000 and the program will abort.
    2. Under asan, the system will attempt to actually allocate 96GB of memory, because asan writes to all the allocated memory in __interceptor_malloc -> asan_malloc. If the user has swap enabled, this will soon cause thrashing, rendering the computer unusable. If not, the Linux OOM killer will come along and kill processes until more memory is available (hopefully it kills the chat client).

    As an alternative, the code could allocate a smaller array at first and then exponentially grow it until it reaches the given size (similar to std::vector::push_back). If performance is a concern, you could limit this behaviour to arrays larger than some number (e.g. only for array_32s).

    opened by iphydf 5
Releases(cpp-4.1.3)
  • cpp-4.1.3(Nov 2, 2022)

  • cpp-4.1.2(Sep 7, 2022)

  • cpp-4.1.1(Mar 9, 2022)

  • cpp-4.1.0(Feb 12, 2022)

  • cpp-4.0.3(Oct 23, 2021)

  • c-4.0.0(Sep 1, 2021)

    2021-08-01 version 4.0.0

    • Fix and improve alignment logic (#962)
    • Fix iovec name conflict (#953)
    • Fix empty string print (#942)
    • Fix buffer ptr size (#899)
    • Fix UB. Check null pointer before using memcpy() (#890)
    • Improve CI environment (#885, #899)

    << breaking changes >>

    • Separate C part of the msgpack-c from C/C++ mixed msgpack-c (#876, #878)
    Source code(tar.gz)
    Source code(zip)
    msgpack-c-4.0.0.tar.gz(67.66 KB)
  • cpp-4.0.2(Aug 31, 2021)

  • cpp-4.0.1(Aug 30, 2021)

  • cpp-4.0.0(Aug 29, 2021)

    2021-08-29 version 4.0.0 for C++

    • Improve zone alignment logic (#965)
    • Fix v1 unpack logic for STR and BIN (#957, #951)
    • Fix UB on memcmp with size 0 (#954)
    • Fix iovec name conflict (#952)
    • Add std::array<std::byte> std::span<char> std::span<unsigned char> std::span<std::byte> adaptors (#951)
    • Improve documents (#918, #919, #951)
    • Improve tests (#916)
    • Introduce BOOST_ASSERT (#898)
    • Improve build system (#897, #905, #924, #951)
    • Improve Boost.Fusion support (#894)
    • Check nullptr before call memcpy (#891)
    • Refine and bugfix std::chrono::time_point adaptor (#888, #893)
    • Improve CI (#884, #892, #895, #951, #955)

    << breaking changes >>

    • Separate C++ part of the msgpack-c from C/C++ mixed msgpack-c (#876, #878)
    • Require boost libraries. See README.md Dependency(#912)
    Source code(tar.gz)
    Source code(zip)
    msgpack-cxx-4.0.0.tar.gz(233.53 KB)
  • cpp-3.3.0(Jun 5, 2020)

    2020-06-05 version 3.3.0

    • Add json example for C (#870)
    • Add both header and body packing functions for C (#870)
    • Set default ref_size and chunk_size to vrefbuffer (#865)
    • Add examples (#861)
    • Improve build system (#839, #842)
    • Improve tests (#829)
    • Improve documents (#828)
    • Remove some warnings (#827, #851, #871)
    • Improve CI environment (#824, #831, #833, #834, #846, #860, 874)
    Source code(tar.gz)
    Source code(zip)
    msgpack-3.3.0.tar.gz(496.09 KB)
  • cpp-3.2.1(Dec 10, 2019)

    2019-12-10 version 3.2.1

    • Fix snprintf return value checking (#821)
    • Remove some warnings (#819)
    • Fix fbuffer result checking (#812)
    • Fix temporary object handling (#807)
    • Improve cmake support (#804)
    • Fix invalid int main parameter (#800)
    • Improve supporting platform (#797, #817)
    • Fix ZLIB error handling (#795)
    • Remove unused variable (#793)
    • Improve integer overflow checking (#792)
    Source code(tar.gz)
    Source code(zip)
    msgpack-3.2.1.tar.gz(1.17 MB)
  • cpp-3.2.0(May 27, 2019)

    2019-05-27 version 3.2.0

    • Fix invalid include (#783)
    • Add timespec support (#781)
    • Fix unchecked fnprintf on C (#780)
    • Improve integer overflow checking on C (#776)
    • Fix warnings on -Wconversion (#770, #777, #784)
    • Fix invalid passed by value on aligned_zone_size_visitor (#764)
    • Improve windows support (#757, #779)
    • Fix msgpack::object size caluclation error (#754)
    • Fix memory error on example code (#753)
    • Fix redundant memory allocation on C (#747)
    • Fix msgpack::type::tuple base class conversion (#743)
    Source code(tar.gz)
    Source code(zip)
    msgpack-3.2.0.tar.gz(487.48 KB)
  • cpp-3.1.1(Sep 9, 2018)

  • cpp-3.1.0(Aug 21, 2018)

    2018-08-10 version 3.1.0

    • Improve documents (#687, #718)
    • Add fuzzer support (#689)
    • Fix msgpack::object union member access bug (#694)
    • Improve cross platform configuration (#704)
    • Fix out of range dereference bug of EXT (#705)
    • Add timestamp support. std::chrono::system_clock::time_point is mapped to TIMESTAMP (#706)
    • Add minimal timestamp support for C. The type msgpack_timestamp and the function msgpack_object_to_timestamp() are introduced (#707)
    • Improve MSGPACK_DEFINE family name confliction probability (#710)
    • Add no static-library build option (BUILD_SHARED_LIBS=ON) (#713, #717, #722)
    • Add header only cmake target (#721)
    • Add std::byte adaptor (#719)
    • Remove some warnings (#720)
    Source code(tar.gz)
    Source code(zip)
    msgpack-3.1.0.tar.gz(478.87 KB)
  • cpp-3.0.1(May 12, 2018)

  • cpp-3.0.0(May 9, 2018)

    2018-05-09 version 3.0.0

    << breaking changes >>

    • Change offset parameter updating rule. If parse error is happend, offset is updated to the error position. (#639, #666)

    << other updates >>

    • Improve cross platform configuration (#655, #677)
    • Improve build system (#647)
    • Improve user class adaptor (#645, #673)
    • Improve msgpack::object visitation logic (#676)
    • Remove some warnings (#641, 659)
    • Add -> and * operators to object_handle (#635)
    • Improve CI environment (#631, #634, #643, #657, #662, #668)
    • Improve documents (#630, #661)
    • Refactoring (#670)
    • Add OSS-Fuzz support (#672, #674, #675, #678)
    Source code(tar.gz)
    Source code(zip)
    msgpack-3.0.0.tar.gz(467.74 KB)
  • cpp-2.1.5(Aug 3, 2017)

    2017-08-04 version 2.1.5

    • Improve cross platform configuration (#624)
    • Add boost asio examples (including zlib) (#610)
    • Remove some warnings (#611)
    • Fix unpack visitor to treat float32/64 correctly (#613)
    • Improve documents (#616)
    • Fix alignment problem on some platform (#617, #518)
    • Fix conflict std::tuple, std::pair, and boost::fusion::sequence problem (#619)

    2017-08-03 version 2.1.4 (Invalid)

    • See https://github.com/msgpack/msgpack-c/issues/623
    Source code(tar.gz)
    Source code(zip)
    msgpack-2.1.5.tar.gz(453.07 KB)
  • cpp-2.1.3(Jun 15, 2017)

  • cpp-2.1.2(Jun 7, 2017)

    • Improve documents (#565)
    • Fix empty map parse bug (#568)
    • Improve build system (#569, #570, #572, #579, #591, #592)
    • Remove some warnings (#574, #578, #586, #588)
    • Improve cross platform configuration (#577, #582)
    • Add cmake package config support (#580)
    • Fix streaming unpack bug (#585)
    Source code(tar.gz)
    Source code(zip)
    msgpack-2.1.2.tar.gz(446.74 KB)
  • cpp-2.1.1(Feb 4, 2017)

  • cpp-2.1.0(Jan 10, 2017)

    << breaking changes >>

    • Fix object internal data type is float if msgpack format is float32 (#531)

    << recommended changes >>

    • Add FLOAT64 type. Please use it instead of DOUBLE (#531)
    • Add FLOAT32 type. Please use it instead of FLOAT (#531)

    << other updates >>

    • Add iterator based parse/unpack function(experimental) (#553)
    • Add [[deprecated]] attribute for C++14 (#552)
    • Fix msgpack_unpack() return code (#548)
    • Fix integer overflow (#547, #549, #550)
    • Add example codes (#542)
    • Add MSGPACK_NVP. You can use not only variable name but also any strings (#535)
    • Fix and Improve build system (#532, #545)
    • Fix gcc_atomic.hpp include path (#529, #530)
    • Improve CI environment (#526)
    • Improve documents (#524)
    • Add msgpack_unpacker_next_with_size() function (#515)
    • Fix as() applying condition (#511)
    • Fix fbuffer write (#504)
    • Add gcc bug workaround (#499)
    • Improve object print (#497, #500, #505, #533)
    • Remove some warnings (#495, #506, #508, #513, #528, #538, #545)
    Source code(tar.gz)
    Source code(zip)
    msgpack-2.1.0.tar.gz(448.58 KB)
  • cpp-2.0.0(Jun 25, 2016)

    << breaking changes >>

    • Removed autotools support. Use cmake instead (#476, #479)
    • Removed pointer version of msgpack::unpack APIs. Use reference version instead (#453)
    • Removed MSGPACK_DISABLE_LEGACY_CONVERT. msgpack::object::convert(T*) is removed by default. Use msgpack::object::convert(T&) instead (#451)
    • Removed msgpacl::type::nil. Use nil_t or define MSGPACK_USE_LECACY_NIL (#444)
    • Removed std::string to msgpack::object conversion (#434)

    << recommended changes >>

    • Replaced msgpack::unpacked with msgpack::object_handle. msgpack::unpacked is kept as a typedef of msgpack::object_handle. (#448)

    << other updates >>

    • Add strict size checking adaptor. Relaxed tuple conversion (#489)
    • Fix and Improve example codes (#487)
    • Add C++/CLI support for nullptr (#481)
    • Update the boost libraries that are contained by msgpack-c (#475)
    • Fix gcc_atomic.hpp location (#474)
    • Add C-Style array support (#466, #488)
    • Fix include file dependency (#464)
    • Add a visitor version of unpack API (#461)
    • Fix JSON string conversion from "nil" to "null" (#458)
    • Fix and Improve build system (#455, #471, #473, #486, #491)
    • Fix comments (#452)
    • Fix unintentional msgpack::zone moving problem (#447)
    • Fix operator>> and << for msgpack::object (#443)
    • Fix C++03 msgpack::zone::clear() memory access violation bug (#441)
    • Fix TARGET_OS_IPHONE checking (#436)
    • Fix invalid front() call for empty container (#435)
    • Fix compile error on g++6 (C++11 only) (#426, #430)
    • Fix zone size expansion logic (#423)
    • Fix wrong hader file dependency (#421)
    • Fix msvc specific problem (#420)
    • Add v2 API support (#415)
    Source code(tar.gz)
    Source code(zip)
    msgpack-2.0.0.tar.gz(435.60 KB)
  • cpp-1.4.2(May 27, 2016)

  • cpp-1.4.1(Mar 6, 2016)

  • cpp-1.4.0(Jan 22, 2016)

    << recommended changes >>

    • Define MSGPACK_DISABLE_LEGACY_NIL, then msgpack::type::nil is replaced by with msgpack::type::nil_t (#408, #411, #412). Replace msgpack::type::nil with msgpack::type::nil_t in client codes. msgpack::type::nil will be removed on the version 2.0.0.

    • Define MSGPACK_DISABLE_LEGACY_CONVERT, then msgpack::object::convert(T*) is removed (#410). Replace calling msgpack::bojectconvert(T*) with msgpack::bojectconvert(T&) in client codes as follows:

       int i;
       obj.convert(&i); // before
      
       int i;
       obj.convert(i);  // after
      

      msgpack::object::convert(T*) will be removed on the version 2.0.0.

    Define the macros above as follows when you compile C++ codes that use msgpack-c:

    g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_code.cpp
    
    

    You can compile existing codes without defining macros above but I recommend defining them and updating your codes to fix the issues #408, #411, #412, #399, and #410. It is also a good preparation for the version 2.0.0.

    << other updates >>

    • Improve documents (#387, #407)
    • Remove C++ version library (#394, #402)
    • Add Doxyfile and ChangeLog to the distribution package (#397)
    • Add signed/unsigned char test to travis-ci (#398)
    • Remove some warnings (#400, #401, #409)
    • Fix endian checking. (#404)
    Source code(tar.gz)
    Source code(zip)
    msgpack-1.4.0.tar.gz(752.83 KB)
  • cpp-1.3.0(Nov 22, 2015)

    • Change the license from the Apache License Version 2.0 to the Boost Software License, Version 1.0.(#386)
    • Remove some warnings (#365)
    • Add std::reference_wrapper support(#373, #384)
    • Improve tests (#375, #378, #379, #380)
    • Fix msvc specific problem (#376, #383)
    • Fix typos (#381)
    Source code(tar.gz)
    Source code(zip)
    msgpack-1.3.0.tar.gz(731.88 KB)
  • cpp-1.2.0(Sep 4, 2015)

    breaking changes

    • Change std::vector and std::array mapped to BIN instead of ARRAY (#243)
    • Remove redundant copy (#285)

    other updates

    • Add array_ref to map to ARRAY (#243)
    • Add variant type and adaptor (#349)
    • Add object::convert_if_not_nil() (#357)
    • Fix invalid offset update (#354)
    • Add C++11 support on MSVC2015(#339, #347)
    • Fix and Improve build system (#346, #350, #361, #363)
    • Import Boost.Preprocessor as a part of msgpack-c (#312)
    • Fix OSX with libc++ specific errors (#334, #362)
    • Add customized containers support (#330)
    • Add std::unique_ptr and std::shared_ptr support (#329)
    • Add missing install files (#328)
    • Add shared/static library switching option (#316)
    • Improve no throw description on C++11 (#313)
    • Import Boost.Predef as a part of msgpack-c (#312)
    • Add map based serialize support (#306)
    • Add Boost.Fusion support (#305)
    • Add v4 format RAW support (#304)
    • Fix zbuffer with empty string problem (#303)
    • Add non default constructible class support (#302, #324, #327, #331, #332, #345)
    • Add inline keyword to function (template) (#299)
    • Add EXT type supporting classes (#292, #308)
    • Fix raw_ref != comparison (#290)
    • Add object deep copy (#288)
    • Remove some warnings (#284, #322, #323, #335)
    • Improve compiler version checking (#283)
    • Add return value to object::convert() (#282)
    • Improve move semantic support in C++11 (#279, #353)
    • Add Boost.StringRef support (#278)
    • Improve CI environment (#276, #294, #338)
    • Add converting to JSON (#274, #301)
    • Fix iOS specific problem (#270)
    • Improve doxtgen document generation (#269)
    • Add Boost.Optional support (#268)
    • Fix msvc specific problem (#267, #295)
    • Add base class serialization. (#265, #277)
    • Add and improve examples. (#264, #310, #311, #341, #342, #344)
    • Fix wiki URL. (#263)
    Source code(tar.gz)
    Source code(zip)
    msgpack-1.2.0.tar.gz(705.54 KB)
  • cpp-1.1.0(Apr 3, 2015)

    breaking changes

    • Remove msgpack_fwd.hpp (#262)
    • Improve user types adaptation mechanism (#262)
      • Since version 1.0.0, users need to obey the correct include order. However, it is very difficult to maintain the correct order in big projects. version 1.1.0 removed this order. Users don't need to care about include order. Migration guide from 1.0.x to 1.1.0 has been written. See https://github.com/msgpack/msgpack-c/wiki

    other updates

    • Fix vector size check (#251)
    • Fix inttypes.h inclusion on MSVC (#257)
    • Support documents generation by Doxygen (#259)
    • Remove C99 style variable declaration (#253)
    • Improve documents (https://github.com/msgpack/msgpack-c/wiki)
    Source code(tar.gz)
    Source code(zip)
    msgpack-1.1.0.tar.gz(481.98 KB)
  • cpp-1.0.1(Mar 22, 2015)

  • cpp-1.0.0(Mar 10, 2015)

Owner
MessagePack
MessagePack
MPack - A C encoder/decoder for the MessagePack serialization format / msgpack.org[C]

Introduction MPack is a C implementation of an encoder and decoder for the MessagePack serialization format. It is: Simple and easy to use Secure agai

Nicholas Fraser 413 Nov 30, 2022
Msgpack11 - A tiny MessagePack library for C++11 (msgpack.org[C++11])

What is msgpack11 ? msgpack11 is a tiny MsgPack library for C++11, providing MsgPack parsing and serialization. This library is inspired by json11. Th

Masahiro Wada 99 Nov 4, 2022
static_vector implementation in terms of std::vector. No need to implement each function again and again ;)

static_vector static_vector implementation in terms of std::vector. No need to implement each function again and again ;) The usage is basically the s

Alex 6 Oct 29, 2022
Protocol Buffers implementation in C

Overview This is protobuf-c, a C implementation of the Google Protocol Buffers data serialization format. It includes libprotobuf-c, a pure C library

null 2.2k Nov 30, 2022
a small protobuf implementation in C

μpb - a small protobuf implementation in C Platform Build Status macOS ubuntu μpb (often written 'upb') is a small protobuf implementation written in

Protocol Buffers 1.3k Nov 24, 2022
Base64 Encoding implementation in C Programming Language

cb64 Base64 Encoding implementation in C Programming Language Spec: https://datatracker.ietf.org/doc/html/rfc4648#page-5 Header only So just copy cb64

Telkom DEV 1 Dec 14, 2021
Header-only TOML config file parser and serializer for C++17 (and later!).

toml++ homepage ✨ This README is fine, but the toml++ homepage is better. ✨ Library features Header-only Supports the latest TOML release (v1.0.0), pl

Mark Gillard 935 Nov 24, 2022
A C++11 or library for parsing and serializing JSON to and from a DOM container in memory.

Branch master develop Azure Docs Drone Matrix Fuzzing --- Appveyor codecov.io Boost.JSON Overview Boost.JSON is a portable C++ library which provides

Boost.org 323 Nov 21, 2022
libcluon is a small and efficient, single-file and header-only library written in modern C++ to power microservices.

libcluon Linux & OSX Build (TravisCI) Win64 Build (AppVeyor) Test Coverage Coverity Analysis CII Best Practices libcluon is a small single-file, heade

Christian Berger 81 Nov 19, 2022
Microsoft 2.5k Nov 28, 2022
Cap'n Proto serialization/RPC system - core tools and C++ library

Cap'n Proto is an insanely fast data interchange format and capability-based RPC system. Think JSON, except binary. Or think Protocol Buffers, except

Cap'n Proto 9.4k Dec 1, 2022
Header-only C++11 library to encode/decode base64, base64url, base32, base32hex and hex (a.k.a. base16) as specified in RFC 4648, plus Crockford's base32. MIT licensed with consistent, flexible API.

cppcodec Header-only C++11 library to encode/decode base64, base64url, base32, base32hex and hex (a.k.a. base16) as specified in RFC 4648, plus Crockf

Topology 486 Nov 17, 2022
Fast Binary Encoding is ultra fast and universal serialization solution for C++, C#, Go, Java, JavaScript, Kotlin, Python, Ruby, Swift

Fast Binary Encoding (FBE) Fast Binary Encoding allows to describe any domain models, business objects, complex data structures, client/server request

Ivan Shynkarenka 646 Dec 1, 2022
FlatBuffers Compiler and Library in C for C

OS-X & Ubuntu: Windows: The JSON parser may change the interface for parsing union vectors in a future release which requires code generation to match

null 544 Nov 26, 2022
Utility to convert any binary file into C source that can be compiled and linked to the executable.

bin2c Utility to convert any binary file into C source that can be compiled and linked to the executable. bin2o Utility to convert any binary file int

Vadim A. Anisimov 16 Jul 14, 2021
A YAML parser and emitter in C++

yaml-cpp yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2 spec. To get a feel for how it can be used, see the Tutorial or How to Emi

Jesse Beder 3.8k Dec 2, 2022
Experimental mutation testing tool for Swift and XCTest powered by mull

mull-xctest Experimental mutation testing tool for Swift and XCTest powered by mull. ⚠️ This tool is still experimental and under development. Install

Yuta Saito 42 Oct 29, 2022
Zmeya is a header-only C++11 binary serialization library designed for games and performance-critical applications

Zmeya Zmeya is a header-only C++11 binary serialization library designed for games and performance-critical applications. Zmeya is not even a serializ

Sergey Makeev 97 Nov 2, 2022