次の機能を使用しようとしていますCoerceUnsized
:
use std::rc::Rc;
use std::borrow::Borrow;
fn main() {
// Create (sized) i32 wrapped in an rc.
let a0: Rc<i32> = Rc::new(0i32);
// Coerce to (unsized) Borrow<i32> wrapped in an rc.
// Works fine in Beta and Nightly cause of CoerceUnsized.
let a1: Rc<Borrow<i32>> = a0.clone();
// Create (sized) i32 in nested rcs.
let b0: Rc<Rc<i32>> = Rc::new(Rc::new(0i32));
// Coerce to (unsized) Borrow<i32> in nested rcs.
// Does not compile in Stable, Beta or Nightly.
let b1: Rc<Rc<Borrow<i32>>> = b0.clone();
println!("{}, {}", a1.borrow(), b1.borrow());
}
ただし、入れ子になった from Rc<Rc<i32>>
to型の強制Rc<Rc<Borrow<i32>>>
はコンパイルされません。
なぜCoerceUnsized
再帰的に動作しないのですか? 明示的なキャストなどの回避策はありますか?