Есть некоторые классы черт, о которых должны знать авторы новых бэкэндов:
namespace boost{ namespace multiprecision{ namespace detail{
template<typename From, typename To>
struct is_explicitly_convertible;
}}}
Наследуется от<boost::integral_constant<bool,true>>, если тип<From>имеет явное преобразование от<To>.
Для компиляторов, поддерживающих SFINAE-выражения C++11, эта черта должна «просто работать». В противном случае он наследуется от<boost::is_convertible<From,To>::type>и должен быть специализирован для Бэкэндов, у которых конструкторы помечены как<explicit>.
template <class From, class To>
struct is_lossy_conversion
{
static const bool value = see below;
};
<value>Верно, если переход от<From>к<To>приведет к потере точности, и<false>в противном случае.
Версия по умолчанию этого признака просто проверяет, является ливидпреобразования (например, из плавающей точки в целочисленный тип) по своей сути убыточным. Обратите внимание, что если один из типов<From>или<To>относится к неизвестной категории чисел (поскольку<number_category>не специализируется на этом типе), то эта черта будет<true>.
template<typename From, typename To>
struct is_restricted_conversion
{
static const bool value = see below;
};
<value>является<true>, если<From>является только явно конвертируемым в<To>и не имплицитно конвертируемым, или если<is_lossy_conversion<From,To>::value>является<true>. В противном случае<false>.
Обратите внимание, что в то время как эта черта является конечным арбитром, конструкторы которого помечены как<explicit>в классе<number>, авторы бэкэнд-типов обычно должны специализировать одну из черт выше, а не эту непосредственно.
template <class T>
is_signed_number;
template <class T>
is_unsigned_number;
Эти две черты наследуются от<mpl::true_>или<mpl::false_>, по умолчанию типы предполагается подписать, если<is_unsigned_number>не является специализированным для этого типа.