summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/math/example/policy_ref_snip13.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/math/example/policy_ref_snip13.cpp')
-rw-r--r--src/boost/libs/math/example/policy_ref_snip13.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/boost/libs/math/example/policy_ref_snip13.cpp b/src/boost/libs/math/example/policy_ref_snip13.cpp
new file mode 100644
index 00000000..ce4b0948
--- /dev/null
+++ b/src/boost/libs/math/example/policy_ref_snip13.cpp
@@ -0,0 +1,81 @@
+// Copyright John Maddock 2007.
+// Copyright Paul A. Bristow 2010
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// Note that this file contains quickbook mark-up as well as code
+// and comments, don't change any of the special comment mark-ups!
+
+#include <boost/config.hpp>
+#ifdef _MSC_VER
+# pragma warning (disable : 4189) // 'd' : local variable is initialized but not referenced
+#endif
+#ifdef BOOST_GCC
+# pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+
+#include <iostream>
+using std::cout; using std::endl;
+
+#include <stdexcept>
+using std::domain_error;
+
+//[policy_ref_snip13
+
+#include <boost/math/distributions/cauchy.hpp>
+
+namespace myspace
+{ // using namespace boost::math::policies; // May be convenient in myspace.
+
+ // Define a policy called my_policy to use.
+ using boost::math::policies::policy;
+
+// In this case we want all the distribution accessor functions to compile,
+// even if they are mathematically undefined, so
+// make the policy assert_undefined.
+ using boost::math::policies::assert_undefined;
+
+typedef policy<assert_undefined<false> > my_policy;
+
+// Finally apply this policy to type double.
+BOOST_MATH_DECLARE_DISTRIBUTIONS(double, my_policy)
+} // namespace myspace
+
+// Now we can use myspace::cauchy etc, which will use policy
+// myspace::mypolicy:
+//
+// This compiles but throws a domain error exception at runtime.
+// Caution! If you omit the try'n'catch blocks,
+// it will just silently terminate, giving no clues as to why!
+// So try'n'catch blocks are very strongly recommended.
+
+void test_cauchy()
+{
+ try
+ {
+ double d = mean(myspace::cauchy()); // Cauchy does not have a mean!
+ (void) d;
+ }
+ catch(const std::domain_error& e)
+ {
+ cout << e.what() << endl;
+ }
+}
+
+//] //[/policy_ref_snip13]
+
+int main()
+{
+ test_cauchy();
+}
+
+/*
+
+Output:
+
+policy_snip_13.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Release\policy_snip_13.exe
+ Error in function boost::math::mean(cauchy<double>&): The Cauchy distribution does not have a mean: the only possible return value is 1.#QNAN.
+
+ */
+