diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index e29a0e17..463c11a3 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -45,6 +45,15 @@ struct StdTuplePacker { } }; +template +struct StdTuplePacker { + static void pack ( + packer&, + const Tuple&) { + } +}; + + template const packer& operator<< ( packer& o, @@ -75,6 +84,14 @@ struct StdTupleConverter { } }; +template +struct StdTupleConverter { + static void convert ( + object const&, + Tuple&) { + } +}; + template object const& operator>> ( object const& o, @@ -105,6 +122,14 @@ struct StdTupleToObjectWithZone { } }; +template +struct StdTupleToObjectWithZone { + static void convert ( + object::with_zone&, + const Tuple&) { + } +}; + template inline void operator<< ( object::with_zone& o, diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 4dee4602..8b5aa607 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -109,6 +109,14 @@ struct MsgpackTuplePacker { } }; +template +struct MsgpackTuplePacker { + static void pack ( + packer&, + const Tuple&) { + } +}; + template const packer& operator<< ( packer& o, @@ -139,6 +147,14 @@ struct MsgpackTupleConverter { } }; +template +struct MsgpackTupleConverter { + static void convert ( + object const&, + Tuple&) { + } +}; + template object const& operator>> ( object const& o, @@ -169,6 +185,14 @@ struct MsgpackTupleToObjectWithZone { } }; +template +struct MsgpackTupleToObjectWithZone { + static void convert ( + object::with_zone&, + const Tuple&) { + } +}; + template inline void operator<< ( object::with_zone& o, diff --git a/test/msgpack_container.cpp b/test/msgpack_container.cpp index 5b8accf0..febef394 100644 --- a/test/msgpack_container.cpp +++ b/test/msgpack_container.cpp @@ -188,6 +188,33 @@ TEST(MSGPACK_STL, simple_buffer_multiset) } } +TEST(MSGPACK_TUPLE, simple_tuple) +{ + msgpack::sbuffer sbuf; + msgpack::type::tuple val1(true, "kzk", 12.3); + msgpack::pack(sbuf, val1); + msgpack::unpacked ret; + msgpack::unpack(ret, sbuf.data(), sbuf.size()); + msgpack::type::tuple val2 + = ret.get().as >(); + EXPECT_EQ(ret.get().via.array.size, 3); + EXPECT_EQ(val1.get<0>(), val2.get<0>()); + EXPECT_EQ(val1.get<1>(), val2.get<1>()); + EXPECT_EQ(val1.get<2>(), val2.get<2>()); +} + +TEST(MSGPACK_TUPLE, simple_tuple_empty) +{ + msgpack::sbuffer sbuf; + msgpack::type::tuple<> val1; + msgpack::pack(sbuf, val1); + msgpack::unpacked ret; + msgpack::unpack(ret, sbuf.data(), sbuf.size()); + ret.get().as >(); + EXPECT_EQ(ret.get().via.array.size, 0); +} + + // TR1 #ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_MAP diff --git a/test/msgpack_cpp11.cpp b/test/msgpack_cpp11.cpp index 26e033df..2d48043e 100644 --- a/test/msgpack_cpp11.cpp +++ b/test/msgpack_cpp11.cpp @@ -26,6 +26,17 @@ TEST(MSGPACK_CPP11, simple_tuple) EXPECT_EQ(val1, val2); } +TEST(MSGPACK_CPP11, simple_tuple_empty) +{ + msgpack::sbuffer sbuf; + std::tuple<> val1; + msgpack::pack(sbuf, val1); + msgpack::unpacked ret; + msgpack::unpack(ret, sbuf.data(), sbuf.size()); + std::tuple<> val2 = ret.get().as >(); + EXPECT_EQ(val1, val2); +} + TEST(MSGPACK_CPP11, simple_array) { for (unsigned int k = 0; k < kLoop; k++) { diff --git a/test/object_with_zone.cpp b/test/object_with_zone.cpp index 38182f0c..34349941 100644 --- a/test/object_with_zone.cpp +++ b/test/object_with_zone.cpp @@ -387,6 +387,15 @@ TEST(object_with_zone, msgpack_tuple) EXPECT_EQ(msgpack::type::get<0>(obj.as()), 1); } +TEST(object_with_zone, msgpack_tuple_empty) +{ + typedef msgpack::type::tuple<> test_t; + test_t v; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.via.array.size, 0); +} + // TR1 #ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_MAP @@ -680,4 +689,13 @@ TEST(object_with_zone, tuple) EXPECT_EQ(obj.as(), v); } +TEST(object_with_zone, tuple_empty) +{ + typedef tuple<> test_t; + test_t v; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); +} + #endif