トレイト境界 サイズ未決定型を受け取れるようにする
トレイト境界はデフォルトでSized付けされる。 (Sized付けされるので、コンパイル時にサイズが決まっている必要がある)
NG
trait A { fn receive_from_b<T: B>(&self, b: &T); } trait B { fn send_a<T: A>(&self, a: T) { a.receive_from_b(self); } } /* error[E0277]: the size for values of type `Self` cannot be known at compilation time --> src/main.rs:7:26 | 7 | a.receive_from_b(self); | ^^^^ doesn't have a size known at compile-time | help: consider further restricting `Self` | 6 | fn send_a<T: A>(&self, a: T) where Self: Sized { | ^^^^^^^^^^^^^^^^^ */
?Sized
をつけてサイズ未決定型にする必要がある。
trait A { fn receive_from_b<T: B + ?Sized>(&self, b: &T); }