about summary refs log tree commit diff
path: root/tests/ui/traits/trait-objects-with-supertraits-56229.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/traits/trait-objects-with-supertraits-56229.rs')
-rw-r--r--tests/ui/traits/trait-objects-with-supertraits-56229.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/ui/traits/trait-objects-with-supertraits-56229.rs b/tests/ui/traits/trait-objects-with-supertraits-56229.rs
new file mode 100644
index 00000000000..27cae968a6a
--- /dev/null
+++ b/tests/ui/traits/trait-objects-with-supertraits-56229.rs
@@ -0,0 +1,36 @@
+// https://github.com/rust-lang/rust/issues/56229
+//@ check-pass
+
+trait Mirror {
+    type Other;
+}
+
+#[derive(Debug)]
+struct Even(usize);
+struct Odd;
+
+impl Mirror for Even {
+    type Other = Odd;
+}
+
+impl Mirror for Odd {
+    type Other = Even;
+}
+
+trait Dyn<T: Mirror>: AsRef<<T as Mirror>::Other> {}
+
+impl Dyn<Odd> for Even {}
+
+impl AsRef<Even> for Even {
+    fn as_ref(&self) -> &Even {
+        self
+    }
+}
+
+fn code<T: Mirror>(d: &dyn Dyn<T>) -> &T::Other {
+    d.as_ref()
+}
+
+fn main() {
+    println!("{:?}", code(&Even(22)));
+}