...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
A policy is a compile-time mechanism for customising the behaviour of a special function, or a statistical distribution. With Policies you can control:
float
to double
and double
to long double
in order to improve precision.
Some of these policies could arguably be runtime variables, but then we couldn't use compile-time dispatch internally to select the best evaluation method for the given policies.
For this reason a Policy is a type: in fact it's an
instance of the class template boost::math::policies::policy<>
. This class is just a compile-time-container
of user-selected policies (sometimes called a type-list):
using namespace boost::math::policies; // // Define a policy that sets ::errno on overflow, and does // not promote double to long double internally: // typedef policy<domain_error<errno_on_error>, promote_double<false> > mypolicy;