blob: feb474f7d0e1d0f45e7c414d6421395fdb81a725 [file] [edit]
//@ check-pass
#![allow(incomplete_features)]
#![feature(move_expr)]
use std::sync::Arc;
fn main() {
let x = Arc::new(String::from("hello"));
assert_eq!(Arc::strong_count(&x), 1);
let outer = || {
assert_eq!(Arc::strong_count(&x), 1);
let inner = || move(x.clone());
assert_eq!(Arc::strong_count(&x), 2);
let y = inner();
assert_eq!(&*y, "hello");
assert_eq!(Arc::strong_count(&x), 2);
drop(y);
assert_eq!(Arc::strong_count(&x), 1);
};
assert_eq!(Arc::strong_count(&x), 1);
// `outer` captures `x` by reference, and `inner` takes ownership of a clone.
println!("{x}");
outer();
assert_eq!(Arc::strong_count(&x), 1);
}