template <typename Pipe = ml::Identity>
struct IsConvertible {
template<typename From, typename To>
using f = /* .... */;
};
Than IsConvertible<Pipe>
is a metafunction that passes to Pipe
an ml::Bool
<isConvertible>
, where isConvertible
is a bool
marking whether From
can be converted to To
. Pipe
defaults to ml::Identity
.
f:: From, To -> ml::Bool<isConvertible> <-> Pipe
using T = ml::f<
ml::IsConvertible<>,
int[],
int*>;
static_assert( std::is_same_v<
T,
ml::Bool<true>>);