This was originally part of this question:
Passing lambda declared using auto-keyword by non-const reference as argument to std::function parameter type
but I decided to make it a separate one.
In what circumstances is it better/more idiomatic to pass a lambda or other function object by reference or value?
You use the same rules for "lambda"s that you would for any object that you take as a parameter.
A function should use non-const reference if the intent of the function is to modify the object for the caller. The function should use const&
if it is just using the object without changing it. And it should pass by value if it is going to copy/move the object into its internal storage.