У меня есть этот код внутри блока try-catch, и он печатает «неправильный вызов функции»
Это происходит, когда вы пытаетесь вызвать инициализированный std::function
:
* по умолчанию1007 *
std :: bad_function_call, если * это не хранит целевую функцию вызываемой функции, т.е.! * This == true.
, предоставленную в документации std::function>::operator()
Вы не передаете свой функтор конструктору std::set
, когда инициализируете объект, используя ctor по умолчанию для std::set
:
set<int, function<bool(int, int)>> S;
, поэтому его следует использовать вместо:
set<int, function<bool(int, int)>> S( l );
и ваша лямбда должна захватывать M
по ссылке, так как любые изменения, сделанные вами позже M
, не будут отражены в этой лямбде, поскольку она захватывает M
по значению.