base Json::Exception
diff --git a/include/json/value.h b/include/json/value.h
index b752fb8..1cd6291 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -11,6 +11,7 @@
 #endif // if !defined(JSON_IS_AMALGAMATION)
 #include <string>
 #include <vector>
+#include <exception>
 
 #ifndef JSON_USE_CPPTL_SMALLMAP
 #include <map>
@@ -32,6 +33,18 @@
  */
 namespace Json {
 
+/** Base class for all exceptions we throw.
+ */
+class Exception : public std::exception {
+public:
+  Exception(std::string const& msg);
+  virtual ~Exception() throw();
+  virtual char const* what() const throw();
+protected:
+  std::string const& msg_;
+  void* future_use_;
+};
+
 /** \brief Type of the value held by a Value object.
  */
 enum ValueType {
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 4e032ce..f7d2cde 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -152,6 +152,18 @@
 
 namespace Json {
 
+Exception::Exception(std::string const& msg)
+  : msg_(msg)
+  , future_use_(NULL)
+{
+}
+Exception::~Exception() throw()
+{}
+char const* Exception::what() const throw()
+{
+  return msg_.c_str();
+}
+
 // //////////////////////////////////////////////////////////////////
 // //////////////////////////////////////////////////////////////////
 // //////////////////////////////////////////////////////////////////