diff --git a/include/json/value.h b/include/json/value.h index be40c30..67d0333 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -400,8 +400,8 @@ Json::Value obj_value(Json::objectValue); // {} /// otherwise, false. bool empty() const; - /// Return isNull() - bool operator!() const; + /// Return !isNull() + explicit operator bool() const; /// Remove all object members and array elements. /// \pre type() is arrayValue, objectValue, or nullValue diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index 5197d18..91d4802 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -962,7 +962,7 @@ bool Value::empty() const { return false; } -bool Value::operator!() const { return isNull(); } +Value::operator bool() const { return ! isNull(); } void Value::clear() { JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || diff --git a/src/test_lib_json/main.cpp b/src/test_lib_json/main.cpp index 4e5aad1..d00e107 100644 --- a/src/test_lib_json/main.cpp +++ b/src/test_lib_json/main.cpp @@ -308,6 +308,12 @@ JSONTEST_FIXTURE(ValueTest, null) { JSONTEST_ASSERT_STRING_EQUAL("", null_.asString()); JSONTEST_ASSERT_EQUAL(Json::Value::null, null_); + + // Test using a Value in a boolean context (false iff null) + JSONTEST_ASSERT_EQUAL(null_,false); + JSONTEST_ASSERT_EQUAL(object1_,true); + JSONTEST_ASSERT_EQUAL(!null_,true); + JSONTEST_ASSERT_EQUAL(!object1_,false); } JSONTEST_FIXTURE(ValueTest, strings) {