Skip to content

Commit 9b15682

Browse files
committed
Merge pull request #358 from redboltz/fix_357
Fixed #357.
2 parents 9ee1168 + dc2e1a4 commit 9b15682

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

include/msgpack/object.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,16 @@ inline T* object::convert(T* v) const
511511
return v;
512512
}
513513

514+
template <typename T>
515+
inline bool object::convert_if_not_nil(T& v) const
516+
{
517+
if (is_nil()) {
518+
return false;
519+
}
520+
convert(v);
521+
return true;
522+
}
523+
514524
#if defined(MSGPACK_USE_CPP03)
515525

516526
template <typename T>

include/msgpack/object_fwd.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ struct object {
149149
template <typename T>
150150
T* convert(T* v) const;
151151

152+
template <typename T>
153+
bool convert_if_not_nil(T& v) const;
154+
152155
object();
153156

154157
object(const msgpack_object& o);

test/convert.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,20 @@ TEST(convert, return_value_ref)
9393
EXPECT_EQ(&i, &j);
9494
EXPECT_EQ(i, j);
9595
}
96+
97+
TEST(convert, if_not_nil_nil)
98+
{
99+
msgpack::object obj;
100+
int i;
101+
EXPECT_FALSE(obj.convert_if_not_nil(i));
102+
}
103+
104+
TEST(convert, if_not_nil_not_nil)
105+
{
106+
msgpack::zone z;
107+
msgpack::object obj(1, z);
108+
109+
int i;
110+
EXPECT_TRUE(obj.convert_if_not_nil(i));
111+
EXPECT_EQ(i, 1);
112+
}

0 commit comments

Comments
 (0)