29 lines
619 B
Rust
29 lines
619 B
Rust
//@ check-pass
|
|
//@ compile-flags: -Zunpretty=expanded
|
|
#![feature(derive_smart_pointer)]
|
|
use std::marker::SmartPointer;
|
|
|
|
pub trait MyTrait<T: ?Sized> {}
|
|
|
|
#[derive(SmartPointer)]
|
|
#[repr(transparent)]
|
|
struct MyPointer<'a, #[pointee] T: ?Sized> {
|
|
ptr: &'a T,
|
|
}
|
|
|
|
#[derive(core::marker::SmartPointer)]
|
|
#[repr(transparent)]
|
|
pub struct MyPointer2<'a, Y, Z: MyTrait<T>, #[pointee] T: ?Sized + MyTrait<T>, X: MyTrait<T> = ()>
|
|
where
|
|
Y: MyTrait<T>,
|
|
{
|
|
data: &'a mut T,
|
|
x: core::marker::PhantomData<X>,
|
|
}
|
|
|
|
#[derive(SmartPointer)]
|
|
#[repr(transparent)]
|
|
struct MyPointerWithoutPointee<'a, T: ?Sized> {
|
|
ptr: &'a T,
|
|
}
|