...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
template <class From, class To>
struct is_convertible : public true_type-or-false_type
{};
Inherits: If an imaginary rvalue of type
From
is convertible to type
To
then inherits from true_type,
otherwise inherits from false_type.
Type From must not be an incomplete type.
Type To must not be an incomplete, or function type.
No types are considered to be convertible to array types or abstract-class types.
This template can not detect whether a converting-constructor is public
or not: if type To
has a private
converting constructor
from type From
then instantiating
is_convertible<From, To>
will produce a compiler error. For this reason is_convertible
can not be used to determine whether a type has a public
copy-constructor or not.
This template will also produce compiler errors if the conversion is ambiguous, for example:
struct A {}; struct B : A {}; struct C : A {}; struct D : B, C {}; // This produces a compiler error, the conversion is ambiguous: bool const y = boost::is_convertible<D*,A*>::value;
C++ Standard Reference: 4 and 8.5.
Compiler Compatibility: All current compilers are supported by this trait.
Header: #include
<boost/type_traits/is_convertible.hpp>
or #include <boost/type_traits.hpp>
Examples:
is_convertible<int, double>
inherits fromtrue_type
.
is_convertible<const int, double>::type
is the typetrue_type
.
is_convertible<int* const, int*>::value
is an integral constant expression that evaluates to true.
is_convertible<int const*, int*>::value
is an integral constant expression that evaluates to false: the conversion would require aconst_cast
.
is_convertible<int const&, long>::value
is an integral constant expression that evaluates to true.
is_convertible<int, int>::value
is an integral constant expression that evaluates to true.
is_convertible<T, T>::value_type
is the typebool
.