diff options
Diffstat (limited to 'src/boost/libs/math/example/policy_ref_snip13.cpp')
-rw-r--r-- | src/boost/libs/math/example/policy_ref_snip13.cpp | 81 |
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. + + */ + |