Our implementation of twice already works with metafunction
classes. Ideally, we would
like it to work with placeholder expressions too, much the same as
mpl::transform allows us to pass either form. For example, we
would like to be able to write:

But when we look at the implementation of boost::add_pointer,
it becomes clear that the current definition of twice can't
work that way.

template <class T>
struct add_pointer
{
typedef T* type;
};

To be invokable by twice, boost::add_pointer<_1> would have
to be a metafunction class, along the lines of add_pointer_f.
Instead, it's just a nullary metafunction returning the almost
senseless type _1*. Any attempt to use two_pointers will
fail when apply1 reaches for a nested ::apply
metafunction in boost::add_pointer<_1> and finds that it
doesn't exist.

We've determined that we don't get the behavior we want
automatically, so what next? Since mpl::transform can do this
sort of thing, there ought to be a way for us to do it too — and
so there is.