VK
Size: a a a
VK
OA
VK
VK
OA
OA
D
p
EG
mod a {
pub trait A { fn foo(&self); }
}
fn f(b: Box<dyn a::A>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait B: A {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f() -> Box<dyn a::C> {
panic!("nope")
}
impl a::A for () {
fn foo(&self) {
f().foo();
}
}
EG
mod a {
pub trait A { fn foo(&self); }
}
fn f(b: Box<dyn a::A>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait B: A {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f() -> Box<dyn a::C> {
panic!("nope")
}
impl a::A for () {
fn foo(&self) {
f().foo();
}
}
S
mod a {
pub trait A { fn foo(&self); }
}
fn f(b: Box<dyn a::A>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait B: A {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f() -> Box<dyn a::C> {
panic!("nope")
}
impl a::A for () {
fn foo(&self) {
f().foo();
}
}
EG
p
mod a {
pub trait A { fn foo(&self); }
}
fn f(b: Box<dyn a::A>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait B: A {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f(b: Box<dyn a::B>) {
b.foo();
}
mod a {
pub trait A { fn foo(&self); }
pub trait C { fn foo(&self); }
pub trait B: A + C {}
}
fn f() -> Box<dyn a::C> {
panic!("nope")
}
impl a::A for () {
fn foo(&self) {
f().foo();
}
}
p
EG
impl a::A
приносит A
в скоуп резолва трейтов, и методы трейтов в скоупе проверяются раньше, чем методы дин-обджектов, несмотря на то, что методы трейт обджектов типа inherent для нихEG
p
EG
EG
EG