Может быть, не совсем то, что вы ищете, но ... я полагаю, вы можете пройти через функцию, которая получает то же значение по константной ссылке.
Что-то следующее
template <typename T>
auto make_capture_const (T const & x)
{ return [&x](){ std::cout << x << std::endl; }; }
// ...
int x { 42 };
auto l = make_capture_const(x);
l();
Если вы попытаетесь изменить x
внутри лямбды
std::cout << x++ << std::endl;
, вы должны получить сообщение об ошибке.
Как вы можете видеть, из этого решения вы получаете, что x
может 'Он не может быть изменен внутри лямбды, но на лямбду влияют изменения значений вне
int x { 42 };
auto l = make_capture_const(x);
l(); // print 42
x = 43;
l(); // print 43
ИМХО, гипотетический синтаксис захвата [const &]
должен работать таким же образом.Но я понимаю, что это очень сомнительно.