template <class From, class To>
struct is_convertible : public true_type-or-false_type {};
Наследники:Если мнимое значение типа<From>конвертируется в тип<To>, то наследуется отtrue_type, в противном случае наследуется отfalse_type.
Тип не должен быть неполным типом.
Тип Он не должен быть неполным или функциональным.
Никакие типы не считаются конвертируемыми в типы массивов или типы абстрактного класса.
Этот шаблон не может определить, является ли преобразующий конструктор<public>или нет: если тип<To>имеет<private>преобразующий конструктор из типа<From>, то инстанцирование<is_convertible<From,To>>приведет к ошибке компилятора. По этой причине<is_convertible>не может использоваться для определения того, имеет ли тип<public>копи-конструктор или нет.
Этот шаблон также будет создавать ошибки компилятора, если конверсия неоднозначна, например:
struct A {};
struct B : A {};
struct C : A {};
struct D : B, C {};
bool const y = boost::is_convertible<D*,A*>::value;
C++ Стандартная ссылка:4 и 8.5.
Совместимость компиляторов:Все текущие компиляторы поддерживаются этой чертой.
Заголовок:<#include
<boost/type_traits/is_convertible.hpp>>или<#include<boost/type_traits.hpp>>
Примеры:
<is_convertible<int,double>>наследуется от<true_type>.
<is_convertible<constint,double>::type>является типом<true_type>.
<is_convertible<int*const,int*>::value>является интегральным постоянным выражением, которое оцениваетистинно.
<is_convertible<intconst*,int*>::value>является интегральным постоянным выражением, которое оценивает доложным: преобразование потребовало бы<const_cast>.
<is_convertible<intconst&,long>::value>является интегральным постоянным выражением, которое оцениваетистинно.
<is_convertible<int,int>::value>является интегральным постоянным выражением, которое оцениваетистинно.
<is_convertible<T,T>::value_type>является типом<bool>.