summaryrefslogtreecommitdiffstats
path: root/tests/ui/inference/multiple-impl-apply.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /tests/ui/inference/multiple-impl-apply.rs
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/inference/multiple-impl-apply.rs')
-rw-r--r--tests/ui/inference/multiple-impl-apply.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/ui/inference/multiple-impl-apply.rs b/tests/ui/inference/multiple-impl-apply.rs
new file mode 100644
index 000000000..314fe0f2a
--- /dev/null
+++ b/tests/ui/inference/multiple-impl-apply.rs
@@ -0,0 +1,48 @@
+struct Foo {
+ inner: u32,
+}
+
+struct Bar {
+ inner: u32,
+}
+
+#[derive(Clone, Copy)]
+struct Baz {
+ inner: u32,
+}
+
+impl From<Baz> for Bar {
+ fn from(other: Baz) -> Self {
+ Self {
+ inner: other.inner,
+ }
+ }
+}
+
+impl From<Baz> for Foo {
+ fn from(other: Baz) -> Self {
+ Self {
+ inner: other.inner,
+ }
+ }
+}
+
+fn main() {
+ let x: Baz = Baz { inner: 42 };
+
+ // DOESN'T Compile: Multiple options!
+ let y = x.into(); //~ ERROR E0283
+
+ let y_1: Foo = x.into();
+ let y_2: Bar = x.into();
+
+ let z_1 = Foo::from(y_1);
+ let z_2 = Bar::from(y_2);
+
+ // No type annotations needed, the compiler KNOWS the type must be `Foo`!
+ let m = magic_foo(x);
+}
+
+fn magic_foo(arg: Baz) -> Foo {
+ arg.into()
+}