template <typename Pipe = ml::Identity>
struct IsClass {
template<typename T>
using f = /* .... */;
};
Than IsClass<Pipe>
is a metafunction that passes to Pipe
an ml::Bool
<isClass>
, where isClass
is a bool
marking whether T
is a class type. Pipe
defaults to ml::Identity
.
f:: T -> ml::Bool<isClass> <-> Pipe
using T = ml::f<
ml::IsClass<>,
double>;
static_assert( std::is_same_v<
T,
ml::Bool<false>>);