std::is_convertible<From, To>
(the type trait) checks is type From
is implicitly convertible to type To
.
std::convertible_to<From, To>
(the concept) checks that From
is both implicitly and explicitly convertible to To
. It’s rare that this is not the case, such types are ridiculous, but it’s nice in generic code to just not have to worry about that case.
One example:
struct From;
struct To {
explicit To(From) = delete;
};
struct From {
operator To();
};
static_assert(std::is_convertible_v<From, To>);
static_assert(not std::convertible_to<From, To>);