Allow Json::Value to be used in a boolean context (#695)
Must bump soversion too.
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 @@
/// 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 @@
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_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) {