Некоторые функции являются общими (они присутствуют для всех поддерживаемых статистических распределений), но могут быть математически неопределенными для некоторых распределений, но определенными для других.
Например, распределение Коши не имеет значимого значения, поэтому что должно
mean(cauchy<>());
Возвращаться, а должно ли такое выражение вообще составляться?
По умолчанию поведение для всех таких функций не компилировать вообще - на самом деле они поднимутстатическое утверждение- но, изменив политику, мы можем заставить их вернуть результат ошибки домена вместо этого (что вполне может бросить исключение, в зависимости от политики обработки ошибок).
Это поведение контролируется политикой<assert_undefined<>
>:
namespace boost{ namespace math{ namespace policies {
template <bool b>
class assert_undefined;
}}}
Например:
#include <boost/math/distributions/cauchy.hpp>
using namespace boost::math::policies;
using namespace boost::math;
double m1 = mean(cauchy());
double m2 = mean(cauchy_distribution<double, policy<assert_undefined<false> > >());
<policy<assert_undefined<false>
>Поведение также может быть получено путем определения макроса.
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
в главе файла - см.Использование Macros для изменения недостатков политики.