Skip to content

Commit b5a7b5e

Browse files
committed
Fixed a compile error caused by MSGPACK_ADD_ENUM with msgpack::packer
1 parent 85b5e10 commit b5a7b5e

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/msgpack/object.hpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,20 @@ inline T& operator>> (object o, T& v)
212212
return v;
213213
}
214214

215+
namespace detail {
216+
template <typename Stream, typename T>
217+
struct packer_serializer {
218+
static packer<Stream>& pack(packer<Stream>& o, const T& v) {
219+
v.msgpack_pack(o);
220+
return o;
221+
}
222+
};
223+
}
224+
215225
template <typename Stream, typename T>
216226
inline packer<Stream>& operator<< (packer<Stream>& o, const T& v)
217227
{
218-
v.msgpack_pack(o);
219-
return o;
228+
return detail::packer_serializer<Stream, T>::pack(o, v);
220229
}
221230

222231
template <typename T>

src/msgpack/type/define.hpp.erb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,15 @@
4848
template <> \
4949
void operator<< (object::with_zone& o, const enum& v) \
5050
{ \
51-
int tmp = static_cast<enum>(v); \
52-
o << tmp; \
51+
o << static_cast<int>(v); \
52+
} \
53+
namespace detail { \
54+
template <typename Stream> \
55+
struct packer_serializer<Stream, enum> { \
56+
static packer<Stream>& pack(packer<Stream>& o, const enum& v) { \
57+
return o << static_cast<int>(v); \
58+
} \
59+
}; \
5360
} \
5461
}
5562

0 commit comments

Comments
 (0)