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 не трется
Обсуждают сегодня