= std::make_shared<MsgType>(std::forward<MsgType>(msg));
                  
                  
                  
                  
                  
                  http::async_write(stream_, *sp,
                  
                  
                    [ptr = shared_from_this(), sp] (auto && ...args) {
                  
                  
                      ptr->on_write(sp->need_eof(), std::forward<decltype(args)>(args)...);
                  
                  
                    }
                  
                  
                  );
                  
                  
                  
                  
                  
                  Если в лямде используется как выше: [ptr = shared_from_this(), sp], то все ок, однако если написать sp = std::move(sp), то происходит ошибка сегментирования.
                  
                  
                  Очевидно, где-то UB, но вот из-за чего тут возникает UB можете подсказать? shared_ptr не movable-тип?
                  
                  
                
shared_ptr мувается
shared_ptr точно movable.
Тут sp передаётся два раза, как параметр и в захват лямбды, если ты его мувнёшь сразу при создании лямбды, с чем будет работать метод http::async_write(stream_, *sp ?
То есть смотри, тут в общем UB будет, при захвате оно move-нётся, и потом при вычислении параметра *sp оно должно быть использовано. Эти два действия не упорядочены относительно друг друга в выражении.
Обсуждают сегодня