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) {