// 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! #ifdef _MSC_VER # pragma warning (disable : 4189) // 'd' : local variable is initialized but not referenced #endif #include using std::cout; using std::endl; #include using std::domain_error; //[policy_ref_snip13 #include 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 > 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! } 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&): The Cauchy distribution does not have a mean: the only possible return value is 1.#QNAN. */