The convenient names _1, _2,... _5 are actually
typedefs for specializations of mpl::arg that simply
select the Nth argument for any N. [6] The
implementation of placeholders looks something like this:

Remember that invoking a metafunction class is the same as invoking
its nested apply metafunction. When a placeholder in a lambda
expression is evaluated, it is invoked on the expression's actual
arguments, returning just one of them. The results are then
substituted back into the lambda expression and the evaluation
process continues.

The details of its implementation aren't important; all you really
need to know about the unnamed placeholder is that it gets special
treatment. When a lambda expression is being transformed into a
metafunction class by mpl::lambda,

the nth appearance of the unnamed placeholder in a given
template specialization is replaced with _n.