diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-10-18 08:13:25 +0900 |
|---|---|---|
| committer | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-10-18 08:13:25 +0900 |
| commit | d80f93d507406375e302d9583e02bf19d1565cfe (patch) | |
| tree | a83e71bc0689dafb995f124ce050833d03404cab | |
| parent | 59cc9de039ca251599b007cdf32b721bdd3f4578 (diff) | |
| download | rust-d80f93d507406375e302d9583e02bf19d1565cfe.tar.gz rust-d80f93d507406375e302d9583e02bf19d1565cfe.zip | |
Use smaller example for issue-71659
| -rw-r--r-- | src/test/ui/unsized/issue-71659.rs | 84 | ||||
| -rw-r--r-- | src/test/ui/unsized/issue-71659.stderr | 8 |
2 files changed, 15 insertions, 77 deletions
diff --git a/src/test/ui/unsized/issue-71659.rs b/src/test/ui/unsized/issue-71659.rs index ef5ff19153e..3524ca02bbf 100644 --- a/src/test/ui/unsized/issue-71659.rs +++ b/src/test/ui/unsized/issue-71659.rs @@ -1,94 +1,32 @@ #![feature(unsize)] use std::marker::Unsize; -use std::rc::Rc; -use std::sync::Arc; pub trait CastTo<T: ?Sized>: Unsize<T> { fn cast_to(&self) -> &T; - fn cast_mut_to(&mut self) -> &mut T; - fn into_cast_to(self: Box<Self>) -> Box<T>; - fn cast_rc_to(self: Rc<Self>) -> Rc<T>; - fn cast_arc_to(self: Arc<Self>) -> Arc<T>; } -impl<T: ?Sized> Cast for T {} -pub trait Cast { - fn cast<T: ?Sized>(&self) -> &T - where - Self: CastTo<T>, - { +impl<T: ?Sized, U: ?Sized + Unsize<T>> CastTo<T> for U { + fn cast_to(&self) -> &T { self } +} - fn cast_mut<T>(&mut self) -> &mut T - where - Self: CastTo<T>, - { - self.cast_mut_to() - } - - fn into_cast<T>(self: Box<Self>) -> Box<T> - where - Self: CastTo<T>, - { - self.into_cast_to() - } - - fn cast_rc<T>(self: Rc<Self>) -> Rc<T> - where - Self: CastTo<T>, - { - self.cast_rc_to() - } - - fn cast_arc<T>(self: Arc<Self>) -> Arc<T> +impl<T: ?Sized> Cast for T {} +pub trait Cast { + fn cast<T: ?Sized>(&self) -> &T where Self: CastTo<T>, { - self.cast_arc_to() - } -} -impl<T: ?Sized, U: ?Sized + Unsize<T>> CastTo<T> for U { - fn cast_to(&self) -> &T { - self - } - - fn cast_mut_to(&mut self) -> &mut T { - self - } - - fn into_cast_to(self: Box<Self>) -> Box<T> { self } - - fn cast_rc_to(self: Rc<Self>) -> Rc<T> { - self - } - - fn cast_arc_to(self: Arc<Self>) -> Arc<T> { - self - } -} - -pub trait Foo { - fn foo(&self) { - println!("Foo({})", core::any::type_name::<Self>()); - } -} - -pub trait Bar: CastTo<dyn Foo> + CastTo<dyn core::fmt::Debug> + CastTo<[i32]> { - fn bar(&self) { - println!("Bar({})", core::any::type_name::<Self>()); - } } -impl Foo for [i32; 10] {} -impl Bar for [i32; 10] {} +pub trait Foo: CastTo<[i32]> {} +impl Foo for [i32; 0] {} fn main() { - let x = [0; 10]; - let x: Box<dyn Bar> = Box::new(x); - let x = (*x).cast::<[i32]>(); - //~^ ERROR: the trait bound `dyn Bar: CastTo<[i32]>` is not satisfied + let x: &dyn Foo = &[]; + let x = x.cast::<[i32]>(); + //~^ ERROR: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied } diff --git a/src/test/ui/unsized/issue-71659.stderr b/src/test/ui/unsized/issue-71659.stderr index 5d23e991472..be2df8c85e1 100644 --- a/src/test/ui/unsized/issue-71659.stderr +++ b/src/test/ui/unsized/issue-71659.stderr @@ -1,8 +1,8 @@ -error[E0277]: the trait bound `dyn Bar: CastTo<[i32]>` is not satisfied - --> $DIR/issue-71659.rs:92:18 +error[E0277]: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied + --> $DIR/issue-71659.rs:30:15 | -LL | let x = (*x).cast::<[i32]>(); - | ^^^^ the trait `CastTo<[i32]>` is not implemented for `dyn Bar` +LL | let x = x.cast::<[i32]>(); + | ^^^^ the trait `CastTo<[i32]>` is not implemented for `dyn Foo` error: aborting due to previous error |
