Помимо внедрения множества способов выстрелить себе в ногу, новые версии компиляторов чинят разные веселые баги.
Вот к примеру вот этот код:
struct S {
int x;
auto foo() {
return [*this](this auto&& self) {
__builtin_printf("%d ", x);
x = 10;
};
}
};
Возвращаемая лямбда возвращаемая из метода
foo капчурит this, и потом модифицирует значение. Но что будет, если мы сделаем лямбду константной?
int main() {
S s{ 5 };
const auto l = s.foo();
l();
s.x = 15;
l();
__builtin_printf("%d\n", s.x);
}
вот тут clang18.1 нормально сработает и модифицирует константный класс. clang19.1 выдаст ошибку компиляции. А gcc15.2 упадет с segfault
https://godbolt.org/z/8qqbehqhE