You can think of mpl::apply as being just like the apply1
template that we wrote, with two additional features:

While apply1 operates only on metafunction classes, the first
argument to mpl::apply can be any lambda expression
(including those built with placeholders).

While apply1 accepts only one additional argument to which
the metafunction class will be applied, mpl::apply can
invoke its first argument on any number from zero to five
additional arguments. [5] For example: