diff --git a/Builds/VisualStudio2013/RippleD.vcxproj b/Builds/VisualStudio2013/RippleD.vcxproj
index 669533588..303da0ca9 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj
+++ b/Builds/VisualStudio2013/RippleD.vcxproj
@@ -1885,6 +1885,10 @@
+
+ True
+ True
+
True
True
diff --git a/Builds/VisualStudio2013/RippleD.vcxproj.filters b/Builds/VisualStudio2013/RippleD.vcxproj.filters
index bb2a49d0f..2d32fa1b4 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj.filters
+++ b/Builds/VisualStudio2013/RippleD.vcxproj.filters
@@ -2616,6 +2616,9 @@
ripple\basics\impl
+
+ ripple\basics\impl
+
ripple\basics\impl
diff --git a/src/ripple/basics/contract.h b/src/ripple/basics/contract.h
new file mode 100644
index 000000000..a4a7a849e
--- /dev/null
+++ b/src/ripple/basics/contract.h
@@ -0,0 +1,64 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2014 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#ifndef RIPPLE_BASICS_CONTRACT_H_INCLUDED
+#define RIPPLE_BASICS_CONTRACT_H_INCLUDED
+
+#include
+#include
+#include
+
+namespace ripple {
+
+/* Programming By Contract
+
+ This routines are used when checking
+ preconditions, postconditions, and invariants.
+*/
+
+namespace detail {
+
+void
+accessViolation();
+
+void
+throwException(
+ std::exception_ptr ep);
+
+} // detail
+
+template
+void
+Throw (Args&&... args)
+{
+ throwException(
+ std::make_exception_ptr(
+ Exception(std::forward<
+ Args>(args)...)));
+}
+
+/** Called when faulty logic causes a broken invariant. */
+void
+LogicError (
+ std::string const& how);
+
+} // ripple
+
+#endif
diff --git a/src/ripple/basics/impl/contract.cpp b/src/ripple/basics/impl/contract.cpp
new file mode 100644
index 000000000..e10673d33
--- /dev/null
+++ b/src/ripple/basics/impl/contract.cpp
@@ -0,0 +1,52 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2012, 2013 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include
+#include
+
+namespace ripple {
+
+namespace detail {
+
+void
+accessViolation()
+{
+ // dereference memory
+ // location zero
+ int* j = 0;
+ *j++;
+}
+
+// This hook lets you do pre or post
+// processing on exceptions to suit needs.
+void
+throwException (std::exception_ptr ep)
+{
+ std::rethrow_exception(ep);
+}
+
+} // detail
+
+void
+LogicError (std::string const&)
+{
+ detail::accessViolation();
+}
+
+} // ripple
diff --git a/src/ripple/unity/basics.cpp b/src/ripple/unity/basics.cpp
index 0e3ad1460..fa4da07fe 100644
--- a/src/ripple/unity/basics.cpp
+++ b/src/ripple/unity/basics.cpp
@@ -21,6 +21,7 @@
#include
#include
+#include
#include
#include
#include