cpp: Fix convert.enum_member test (issue #50).

The patch add serialization operator for the given enum to avoid the use
of a cast which leads to strict-aliasing warnings and the test to fail.

Solution suggested by qehgt.
This commit is contained in:
Nicolas Despres 2013-01-03 19:19:48 -08:00 committed by FURUHASHI Sadayuki
parent e511c32a36
commit 509f27eee1
2 changed files with 22 additions and 1 deletions

View File

@ -34,6 +34,25 @@
msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \ msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \
} }
// MSGPACK_ADD_ENUM must be used in the global namespace.
#define MSGPACK_ADD_ENUM(enum) \
namespace msgpack { \
template <> \
inline enum& operator>> (object o, enum& v) \
{ \
int tmp; \
o >> tmp; \
v = static_cast<enum>(tmp); \
return v; \
} \
template <> \
void operator<< (object::with_zone& o, const enum& v) \
{ \
int tmp = static_cast<enum>(v); \
o << tmp; \
} \
}
namespace msgpack { namespace msgpack {
namespace type { namespace type {

View File

@ -55,9 +55,11 @@ public:
flags_t flag; flags_t flag;
MSGPACK_DEFINE((int&)flag); MSGPACK_DEFINE(flag);
}; };
MSGPACK_ADD_ENUM(enum_member::flags_t);
TEST(convert, enum_member) TEST(convert, enum_member)
{ {
enum_member src; enum_member src;