p
struct X;
#[sfinae]
impl Default for X {} // <- error originates here
fn main() {
X::default(); // <- but shows here
}
foo! {
Type // Error: Type: Clone is not satisfied
}
Size: a a a
p
struct X;
#[sfinae]
impl Default for X {} // <- error originates here
fn main() {
X::default(); // <- but shows here
}
AV
impl Marker for Structimpl Trait for T where T: Clone + MarkerAV
p
impl Marker for Structimpl Trait for T where T: Clone + MarkerAV
AV
p
struct Foo { a: A, b: B }
и макрос делаетimpl Trait<A> for Foo { fn foo(&self) -> A { self.a.clone() } }
impl Trait<B> for Foo { fn foo(&self) -> B { self.b.clone() } }
Но если A или B !Clone, то код не компилируется. Но при этом в этом макросе принципиально пофиг реализуется трейт или нет, это важно для другого макроса который не имеет доступа к этому.p
p
Э
struct Foo { a: A, b: B }
и макрос делаетimpl Trait<A> for Foo { fn foo(&self) -> A { self.a.clone() } }
impl Trait<B> for Foo { fn foo(&self) -> B { self.b.clone() } }
Но если A или B !Clone, то код не компилируется. Но при этом в этом макросе принципиально пофиг реализуется трейт или нет, это важно для другого макроса который не имеет доступа к этому.Э
AV
struct Foo { a: A, b: B }
и макрос делаетimpl Trait<A> for Foo { fn foo(&self) -> A { self.a.clone() } }
impl Trait<B> for Foo { fn foo(&self) -> B { self.b.clone() } }
Но если A или B !Clone, то код не компилируется. Но при этом в этом макросе принципиально пофиг реализуется трейт или нет, это важно для другого макроса который не имеет доступа к этому.p
AV
Struct: Clone зависит от того, есть ли где-то impl Clone for Struct, и всёAV
p
p
Э
trait X<T> {}
impl<T, U> X<T> for U
where
T: Clone + seal::Sealed,
U: ?Sized,
{}
mod seal { /* … */ }
?IF
IF