Skip to content

Commit 8792f42

Browse files
authored
Merge pull request #743 from redboltz/fix_741
Fixed #741.
2 parents db54c78 + 4f9ec65 commit 8792f42

File tree

7 files changed

+94
-82
lines changed

7 files changed

+94
-82
lines changed

erb/v1/cpp03_msgpack_tuple.hpp.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ inline tuple<> make_tuple()
121121
/// @cond
122122
<%0.upto(GENERATION_LIMIT) {|i|%>
123123
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
124-
inline tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>)
124+
tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>)
125125
{
126126
return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
127127
}

erb/v1/cpp03_msgpack_tuple_decl.hpp.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ tuple<> make_tuple();
5454
/// @cond
5555
<%0.upto(GENERATION_LIMIT) {|i|%>
5656
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
57-
tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>);
57+
tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>);
5858
<%}%>
5959
/// @endcond
6060

include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp

Lines changed: 32 additions & 32 deletions
Large diffs are not rendered by default.

include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp

Lines changed: 32 additions & 32 deletions
Large diffs are not rendered by default.

include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ struct MsgpackTuplePacker {
5353
msgpack::packer<Stream>& o,
5454
const Tuple& v) {
5555
MsgpackTuplePacker<Stream, Tuple, N-1>::pack(o, v);
56-
o.pack(type::get<N-1>(v));
56+
o.pack(v.template get<N-1>());
5757
}
5858
};
5959

@@ -62,7 +62,7 @@ struct MsgpackTuplePacker<Stream, Tuple, 1> {
6262
static void pack (
6363
msgpack::packer<Stream>& o,
6464
const Tuple& v) {
65-
o.pack(type::get<0>(v));
65+
o.pack(v.template get<0>());
6666
}
6767
};
6868

@@ -122,7 +122,7 @@ struct MsgpackTupleConverter {
122122
Tuple& v) {
123123
MsgpackTupleConverter<Tuple, N-1>::convert(o, v);
124124
if (o.via.array.size >= N)
125-
o.via.array.ptr[N-1].convert<typename std::remove_reference<decltype(type::get<N-1>(v))>::type>(type::get<N-1>(v));
125+
o.via.array.ptr[N-1].convert<typename std::remove_reference<decltype(v.template get<N-1>())>::type>(v.template get<N-1>());
126126
}
127127
};
128128

@@ -131,7 +131,7 @@ struct MsgpackTupleConverter<Tuple, 1> {
131131
static void convert (
132132
msgpack::object const& o,
133133
Tuple& v) {
134-
o.via.array.ptr[0].convert<typename std::remove_reference<decltype(type::get<0>(v))>::type>(type::get<0>(v));
134+
o.via.array.ptr[0].convert<typename std::remove_reference<decltype(v.template get<0>())>::type>(v.template get<0>());
135135
}
136136
};
137137

@@ -174,7 +174,7 @@ struct MsgpackTupleToObjectWithZone {
174174
msgpack::object::with_zone& o,
175175
const Tuple& v) {
176176
MsgpackTupleToObjectWithZone<Tuple, N-1>::convert(o, v);
177-
o.via.array.ptr[N-1] = msgpack::object(type::get<N-1>(v), o.zone);
177+
o.via.array.ptr[N-1] = msgpack::object(v.template get<N-1>(), o.zone);
178178
}
179179
};
180180

@@ -183,7 +183,7 @@ struct MsgpackTupleToObjectWithZone<Tuple, 1> {
183183
static void convert (
184184
msgpack::object::with_zone& o,
185185
const Tuple& v) {
186-
o.via.array.ptr[0] = msgpack::object(type::get<0>(v), o.zone);
186+
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
187187
}
188188
};
189189

include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace type {
3131
using std::ignore;
3232
using std::swap;
3333

34-
template< class... Types >
34+
template <class... Types>
3535
class tuple : public std::tuple<Types...> {
3636
public:
3737
using base = std::tuple<Types...>;
@@ -61,17 +61,17 @@ namespace type {
6161
return *this;
6262
}
6363

64-
template< std::size_t I>
65-
typename tuple_element<I, base >::type&
66-
get() & { return std::get<I>(*this); }
64+
template<std::size_t I>
65+
typename tuple_element<I, base>::type&
66+
get() & noexcept { return std::get<I>(static_cast<base&>(*this)); }
6767

68-
template< std::size_t I>
69-
typename tuple_element<I, base >::type const&
70-
get() const& { return std::get<I>(*this); }
68+
template<std::size_t I>
69+
typename tuple_element<I, base>::type const&
70+
get() const& noexcept { return std::get<I>(static_cast<base const&>(*this)); }
7171

72-
template< std::size_t I>
73-
typename tuple_element<I, base >::type&&
74-
get() && { return std::get<I>(*this); }
72+
template<std::size_t I>
73+
typename tuple_element<I, base>::type&&
74+
get() && noexcept { return std::get<I>(static_cast<base&&>(*this)); }
7575

7676
std::size_t size() const { return sizeof...(Types); }
7777
};

test/msgpack_container.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,18 @@ TEST(MSGPACK_TUPLE, simple_tuple_less_than_convert)
528528
EXPECT_EQ(val1.get<1>(), val2.get<1>());
529529
}
530530

531+
TEST(MSGPACK_TUPLE, simple_tuple_nest)
532+
{
533+
msgpack::sbuffer sbuf;
534+
msgpack::type::tuple<msgpack::type::tuple<> > val1;
535+
msgpack::pack(sbuf, val1);
536+
msgpack::object_handle oh =
537+
msgpack::unpack(sbuf.data(), sbuf.size());
538+
msgpack::type::tuple<msgpack::type::tuple<> > val2;
539+
oh.get().convert(val2);
540+
EXPECT_EQ(oh.get().via.array.size, 1u);
541+
}
542+
531543
// TR1
532544

533545
#if defined(MSGPACK_HAS_STD_TR1_UNORDERED_MAP) || defined(MSGPACK_HAS_STD_TR1_UNORDERED_SET)

0 commit comments

Comments
 (0)