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
>.