No, the type of each lambda is unique and unnamed, so there's nothing you could replace auto
with without at least some change in semantics.
std::function
(and other std::..._function
classes) have overhead, only use them if you need the ability to select one of several lambdas at runtime.
Function pointers should have no overhead, but can only point to capture-less lambdas, as explained in the other answers.