summaryrefslogtreecommitdiffstats
path: root/src/test/ui/unsized/issue-71659.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/unsized/issue-71659.rs')
-rw-r--r--src/test/ui/unsized/issue-71659.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/unsized/issue-71659.rs b/src/test/ui/unsized/issue-71659.rs
new file mode 100644
index 000000000..3524ca02b
--- /dev/null
+++ b/src/test/ui/unsized/issue-71659.rs
@@ -0,0 +1,32 @@
+#![feature(unsize)]
+
+use std::marker::Unsize;
+
+pub trait CastTo<T: ?Sized>: Unsize<T> {
+ fn cast_to(&self) -> &T;
+}
+
+impl<T: ?Sized, U: ?Sized + Unsize<T>> CastTo<T> for U {
+ fn cast_to(&self) -> &T {
+ self
+ }
+}
+
+impl<T: ?Sized> Cast for T {}
+pub trait Cast {
+ fn cast<T: ?Sized>(&self) -> &T
+ where
+ Self: CastTo<T>,
+ {
+ self
+ }
+}
+
+pub trait Foo: CastTo<[i32]> {}
+impl Foo for [i32; 0] {}
+
+fn main() {
+ let x: &dyn Foo = &[];
+ let x = x.cast::<[i32]>();
+ //~^ ERROR: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied
+}