К сожалению, вы получите несколько типов с этим решением. [expr.prim.lambda.closure] / 1 утверждает, что
Тип лямбда-выражения (который также является типом замыканияобъект) является уникальным , безымянным типом класса без объединения, называемым типом замыкания, свойства которого описаны ниже.
выделение шахты
Таким образом, каждый
const auto func = [=](){ return 13 == param; };
является своим собственным выражением, поэтому вы получаете новый уникальный тип, даже если они синтаксически одинаковы.
То, что вы можете сделать, это учесть повторениев функтор, и тогда у вас будет только один класс, который определен.
class compare
{
int val;
public:
compare(int val) : val(val) {}
bool operator() const { return val = 13; }
};
и тогда ваши функции станут
void one(const int param) {
const auto func = compare{param};
}
void two(const int param) {
const auto func = compare{param};
}