id summary reporter owner description type status milestone component version severity resolution keywords cc 13584 "boost beast flat buffer move ctor, move assign and swap all ""cancel"" a prepare()" paul.d.rose@… chris_kohlhoff "The boost beast flat_buffer ""cancels"" any outstanding prepare() when being moved from or swapped. This seems like a very sane thing to do. However, boost::asio::async_read_until depends on calling prepare() on it's DynamicBuffer and then calling the corresponding commit() on a moved-to version. Flat buffer will (correctly) silently commit the minimum of the requested size and the size from the previous prepare(). When used with async_read_until, the commit is always zero, since the prepare was ""cancelled"" by the move. The flat_buffer code always sets last_ to out_ during a move or swap, which is what achieves what I am calling the ""cancel"" of the prepare(). I tested setting last_ to other.last_ in the move ctor, move assignment, and swap, and verified that asio::async_read_until now works with beast::flat_buffer On this report I set component=asio, because I couldn't find beast on the drop box. I'm working with 1.67 and g++ 7.30 on ubuntu 18.04 " Bugs new To Be Determined asio Boost 1.67.0 Problem beast