diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2023-08-14 11:56:23 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2023-10-04 02:04:13 +0000 |
| commit | 2817ece19c67a182c0b0aae402c0e57c8ed22dab (patch) | |
| tree | 24b913b9bd9c8b6cc33d14e31d3608953846340a /tests/ui/inference/multiple-impl-apply.rs | |
| parent | 79f38b79147a5fb3c52d1fd1afc571226a77419c (diff) | |
| download | rust-2817ece19c67a182c0b0aae402c0e57c8ed22dab.tar.gz rust-2817ece19c67a182c0b0aae402c0e57c8ed22dab.zip | |
Show more information when multiple `impl` apply
Diffstat (limited to 'tests/ui/inference/multiple-impl-apply.rs')
| -rw-r--r-- | tests/ui/inference/multiple-impl-apply.rs | 50 |
1 files changed, 50 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 00000000000..e6a6b928e56 --- /dev/null +++ b/tests/ui/inference/multiple-impl-apply.rs @@ -0,0 +1,50 @@ +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 E0282 + //~| 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() +} |
