While let liftime problem

⚓ Rust    📅 2025-08-07    👤 surdeus    👁️ 5      

surdeus

Info

This post is auto-generated from RSS feed The Rust Programming Language Forum - Latest topics. Source: While let liftime problem
#[derive(Debug,Default)]
struct C<T>(T, Option<Box<C<T>>>);

impl<T: Default> C<T> {
    fn get(&mut self) -> Self {
        let mut cur = self;
        while let Some(x) = cur.1.as_mut() {
            cur = x.as_mut();
        }
        // Ok
        // while cur.1.is_some(){
        //     cur = cur.1.as_mut().unwrap().as_mut();
        // }

        std::mem::take(cur) // Error
    }
}

why cur.1.as_mut borrow continues after while loop, so that `std::mem::take(cur)` line can not compile

1 post - 1 participant

Read full topic

🏷️ Rust_feed