os и msvc windows в следующем коде.
почему так происходит? это уб?
#include <functional>
class a
{
public:
int a = 0, b = 0;
std::function<int()> l;
int f()
{
l = [this](){
a = 1;
l = [](){ return 1; }; // на винде this теряется и в следующей строчке происходит падение, на мак ос нет.
b = 1;
return 0;
};
return 0;
}
};
int main() {
a a_;
a_.f();
a_.l();
}
предлагаю вопрос перенести в @procxx
Не, не надо переносить.
что не надо? может ты и ответ правильный знаешь?
Я думаю, это из-за отладочного режима в MSVC , она проверяет в функции this.
контекст лямбды не должен теряться
Так там его и нету.
"не зли меня, убью." (с) приключение итальянцев в россии
Иди в жопу. Но я неправ, да.
Поясни, где там что теряется? Какое поведение программы ты наблюдаешь?
смотрю в дебагере, this определяется как 0xadddddd и падает, после присвоения нового значения лямбде
при этом если в обнулении лямбды я захвачу this, то все пройдет штатно
Я про вторую говорил.
пока идет исполнение первой ее контекст не должен измениться, то что ты присваиваешь l новую лямбду не означает, что контекст текущей должен измениться
Вижуалка какая? (компилятор)
Не пробовал переписать l = [](){ return 1; }; на l = []() -> int { return 1; };
Ильюх, ну что за бредовые идеи?
example.cpp <source>(6): error C2461: 'a': constructor syntax missing formal parameters <source>(13): error C2513: 'a': no variable declared before '=' Compiler returned: 2
Стандартик не забыл повыше поставить ?
так ты не выставил standard
Ну так не может быть...
https://godbolt.org/z/oa84vq
Там лучше внутреннюю переменную не A назвать, она совпадает с именем класса. Но это ничего не меняет.
Локально у меня все без крашей проходит, this не трется
Обсуждают сегодня