Как стать автором
Обновить

Комментарии 6

Интересная идея. Могу предположить, что она будет работать и для случая:
auto mutable_lambda = [&counter, &c2](int value) mutable {
	++counter;
	return value * counter + c2;
};

если c2 имеет тип int, но не соберется если тип c2 будет, скажем long long.
Ну, сигнатура лямбды должна совпадать с сигнатурой функции, указатель на которую мы передаём, это разумеется.
Точно, в трех соснах запутался. Попутно нашел сравнительно честный способ выстрела в ногу:
auto just_for_fun()
{
	int mcnt = 3;
	auto const_lambda = [mcnt](int value)
	{
		return value + mcnt;
	};
	return make_closure_erasure(const_lambda);
}

По хорошему, такое безобразие не должно компилироваться.

За отслеживанием времени жизни вам в Rust, а в C++ возврат ссылки/указателя на локальную переменную всегда компилировался...

В случае -Wall -Werror — нет. Пример выше компилируется без предупреждений.

Потому что предупреждения компилятора — это просто костыль для ловли наиболее очевидных ошибок.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории