EG
trait A<T> {
fn f(t: T);
}
struct S<X, Y: A<X>> {
y: Y
}
Без PhantomData нельзя его убедить, что X используется?
Size: a a a
EG
trait A<T> {
fn f(t: T);
}
struct S<X, Y: A<X>> {
y: Y
}
В
trait A<T> {
fn f(t: T);
}
struct S<X, Y: A<X>> {
y: Y
}
EG
А⚙
BD
trait A<T> {
fn f(t: T);
}
struct S<X, Y: A<X>> {
y: Y
}
EG
PhantomData<T>
ломает Sync если T не Sync.EG
PhantomData<Mutex<T>>
.EG
А⚙
PhantomData<Mutex<T>>
.А⚙
PhantomData<fn() -> T>
🦉
EG
A
— это Storage
. Юзер может выбрать любой тип того, что он хранит, соответственно, T — это аргумент дженерика а не ассоциированный типEG
PhantomData<fn() -> T>
В
A
— это Storage
. Юзер может выбрать любой тип того, что он хранит, соответственно, T — это аргумент дженерика а не ассоциированный типT
, а T::Assoc
)Vec<A>: Storage<A>
, то можно всё таки использовать ассоциированный тип.MB
EG
EG
T
, а T::Assoc
)Vec<A>: Storage<A>
, то можно всё таки использовать ассоциированный тип.В
MB
В
T
, но как-то хитро. Например у. тебя *const ()
, а за ним на самом деле T