diff --git a/include/msgpack/adaptor/boost/msgpack_variant.hpp b/include/msgpack/adaptor/boost/msgpack_variant.hpp index 66aaee8b..07d1218a 100644 --- a/include/msgpack/adaptor/boost/msgpack_variant.hpp +++ b/include/msgpack/adaptor/boost/msgpack_variant.hpp @@ -43,7 +43,7 @@ namespace type { template struct basic_variant : boost::variant< - nil, // NIL + nil_t, // NIL bool, // BOOL int64_t, // NEGATIVE_INTEGER uint64_t, // POSITIVE_INTEGER @@ -62,7 +62,7 @@ struct basic_variant : >, private boost::totally_ordered > { typedef boost::variant< - nil, // NIL + nil_t, // NIL bool, // BOOL int64_t, // NEGATIVE_INTEGER uint64_t, // POSITIVE_INTEGER @@ -104,7 +104,7 @@ struct basic_variant : basic_variant(unsigned long long v):base(uint64_t(v)) {} bool is_nil() const { - return boost::get(this); + return boost::get(this); } bool is_bool() const { return boost::get(this); @@ -268,7 +268,7 @@ struct as > { msgpack::type::basic_variant operator()(msgpack::object const& o) const { switch(o.type) { case type::NIL: - return o.as(); + return o.as(); case type::BOOLEAN: return o.as(); case type::POSITIVE_INTEGER: @@ -304,7 +304,7 @@ struct convert > { msgpack::type::basic_variant& v) const { switch(o.type) { case type::NIL: - v = o.as(); + v = o.as(); break; case type::BOOLEAN: v = o.as(); @@ -366,8 +366,8 @@ struct pack > { namespace detail { struct object_imp : boost::static_visitor { - void operator()(msgpack::type::nil const& v) const { - object()(o_, v); + void operator()(msgpack::type::nil_t const& v) const { + object()(o_, v); } void operator()(bool const& v) const { object()(o_, v); diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index fb507cc4..e7f93d10 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -21,13 +21,19 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { namespace type { -struct nil { }; +struct nil_t { }; -inline bool operator<(nil const& lhs, nil const& rhs) { +#if defined(MSGPACK_USE_LEGACY_NIL) + +typedef nil_t nil; + +#endif // defined(MSGPACK_USE_LEGACY_NIL) + +inline bool operator<(nil_t const& lhs, nil_t const& rhs) { return &lhs < &rhs; } -inline bool operator==(nil const& lhs, nil const& rhs) { +inline bool operator==(nil_t const& lhs, nil_t const& rhs) { return &lhs == &rhs; } @@ -36,32 +42,32 @@ inline bool operator==(nil const& lhs, nil const& rhs) { namespace adaptor { template <> -struct convert { - msgpack::object const& operator()(msgpack::object const& o, type::nil&) const { +struct convert { + msgpack::object const& operator()(msgpack::object const& o, type::nil_t&) const { if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); } return o; } }; template <> -struct pack { +struct pack { template - msgpack::packer& operator()(msgpack::packer& o, const type::nil&) const { + msgpack::packer& operator()(msgpack::packer& o, const type::nil_t&) const { o.pack_nil(); return o; } }; template <> -struct object { - void operator()(msgpack::object& o, type::nil) const { +struct object { + void operator()(msgpack::object& o, type::nil_t) const { o.type = msgpack::type::NIL; } }; template <> -struct object_with_zone { - void operator()(msgpack::object::with_zone& o, type::nil v) const { +struct object_with_zone { + void operator()(msgpack::object::with_zone& o, type::nil_t v) const { static_cast(o) << v; } }; @@ -71,7 +77,7 @@ struct object_with_zone { template <> inline void msgpack::object::as() const { - msgpack::type::nil v; + msgpack::type::nil_t v; convert(v); } diff --git a/test/boost_variant.cpp b/test/boost_variant.cpp index f8d2e8b8..8d34ebf7 100644 --- a/test/boost_variant.cpp +++ b/test/boost_variant.cpp @@ -17,7 +17,7 @@ const double kEPS = 1e-10; TEST(MSGPACK_BOOST, pack_convert_variant_nil) { std::stringstream ss; - msgpack::type::variant val1 = msgpack::type::nil(); + msgpack::type::variant val1 = msgpack::type::nil_t(); EXPECT_TRUE(val1.is_nil()); msgpack::pack(ss, val1); @@ -25,28 +25,28 @@ TEST(MSGPACK_BOOST, pack_convert_variant_nil) msgpack::unpack(ret, ss.str().data(), ss.str().size()); msgpack::type::variant val2 = ret.get().as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } TEST(MSGPACK_BOOST, object_variant_nil) { - msgpack::type::variant val1 = msgpack::type::nil(); + msgpack::type::variant val1 = msgpack::type::nil_t(); EXPECT_TRUE(val1.is_nil()); msgpack::object obj(val1); msgpack::type::variant val2 = obj.as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } TEST(MSGPACK_BOOST, object_with_zone_variant_nil) { msgpack::zone z; - msgpack::type::variant val1 = msgpack::type::nil(); + msgpack::type::variant val1 = msgpack::type::nil_t(); EXPECT_TRUE(val1.is_nil()); msgpack::object obj(val1, z); msgpack::type::variant val2 = obj.as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } // nil (default constructor) @@ -63,7 +63,7 @@ TEST(MSGPACK_BOOST, pack_convert_variant_nil_default) msgpack::unpack(ret, ss.str().data(), ss.str().size()); msgpack::type::variant val2 = ret.get().as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } TEST(MSGPACK_BOOST, object_variant_nil_default) @@ -73,7 +73,7 @@ TEST(MSGPACK_BOOST, object_variant_nil_default) msgpack::object obj(val1); msgpack::type::variant val2 = obj.as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } TEST(MSGPACK_BOOST, object_with_zone_variant_nil_default) @@ -84,7 +84,7 @@ TEST(MSGPACK_BOOST, object_with_zone_variant_nil_default) msgpack::object obj(val1, z); msgpack::type::variant val2 = obj.as(); EXPECT_TRUE(val2.is_nil()); - EXPECT_NO_THROW(boost::get(val2)); + EXPECT_NO_THROW(boost::get(val2)); } // bool