Variadic template with function argument
using lambdas might be expensive


Why do you think that?

Lambdas are simply syntactic hand waving for class functors (that have been around for over 3 decades). Functors are considered (in general) to be much more efficient than standard functions (especially when used by templates) as the compiler can do a lot of optimizations on them.

auto x = [&amp;capture](X const&amp; parm){ /* BODY */ }


You can consider as syntactic sugar for:

class CompilerNamedType
{
    TypeOfCapure&amp;     capture;
    public:
        CompilerNamedType(TypeOfCapure&amp; capture)
            : capture(capture)
        {}

        CompilerCalculatedReturnType operator()(X const&amp; param) const
        {
            /* BODY */
        }
};

CompilerNamedType  x(capture);