Lines Matching full:uv
304 /// Given `TU: Project` and `UV: Project`, `TransitiveProject<_, TU, UV>` is
305 /// a [`Project`] which projects by applying `TU` followed by `UV`.
307 /// If `TU: Cast` and `UV: Cast`, then `TransitiveProject<_, TU, UV>: Cast`.
309 pub struct TransitiveProject<U: ?Sized, TU, UV> {
311 _projections: PhantomData<(TU, UV)>,
314 // `UV` to avoid this situation.
318 // SAFETY: Since `TU::project` and `UV::project` are each
321 unsafe impl<T, U, V, TU, UV> Project<T, V> for TransitiveProject<U, TU, UV>
327 UV: Project<U, V>,
331 t.project::<_, TU>().project::<_, UV>().as_ptr() in project()
336 // `UV::project`, and since `TU` and `UV` are `Cast`, the `Project::project`
338 unsafe impl<T, U, V, TU, UV> Cast<T, V> for TransitiveProject<U, TU, UV>
344 UV: Cast<U, V>,
349 // `UV::project`, and since `TU` and `UV` are `CastExact`, the `Project::project`
351 unsafe impl<T, U, V, TU, UV> CastExact<T, V> for TransitiveProject<U, TU, UV>
357 UV: CastExact<U, V>,