mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
25 lines
630 B
Rust
25 lines
630 B
Rust
|
// compile-flags: --crate-type=lib
|
||
|
// check-pass
|
||
|
|
||
|
pub trait Widget<E> {
|
||
|
fn boxed<'w>(self) -> Box<dyn WidgetDyn<E> + 'w>
|
||
|
where
|
||
|
Self: Sized + 'w;
|
||
|
}
|
||
|
|
||
|
pub trait WidgetDyn<E> {}
|
||
|
|
||
|
impl<T, E> WidgetDyn<E> for T where T: Widget<E> {}
|
||
|
|
||
|
impl<E> Widget<E> for dyn WidgetDyn<E> + '_ {
|
||
|
fn boxed<'w>(self) -> Box<dyn WidgetDyn<E> + 'w>
|
||
|
where
|
||
|
Self: Sized + 'w,
|
||
|
{
|
||
|
// Even though this is illegal to const evaluate, this should never
|
||
|
// trigger an ICE because it can never be called from actual code
|
||
|
// (due to the trivially false where-clause predicate).
|
||
|
Box::new(self)
|
||
|
}
|
||
|
}
|