diff options
| author | Ding Xiang Fei <dingxiangfei2009@protonmail.ch> | 2022-11-28 01:48:35 +0800 |
|---|---|---|
| committer | Ding Xiang Fei <dingxiangfei2009@protonmail.ch> | 2022-11-28 01:48:35 +0800 |
| commit | 9cd12cdf788e3bc46ff72ec7f77448316cfa64c3 (patch) | |
| tree | f5c506fad4ac0c7cf0ee044de1a20c67d5d6d9fc | |
| parent | daf93df430eddbaeb31fea2fcb91c974b0b7bcf5 (diff) | |
| download | rust-9cd12cdf788e3bc46ff72ec7f77448316cfa64c3.tar.gz rust-9cd12cdf788e3bc46ff72ec7f77448316cfa64c3.zip | |
inference test for #104649
| -rw-r--r-- | src/test/ui/inference/issue-104649.rs | 32 | ||||
| -rw-r--r-- | src/test/ui/inference/issue-104649.stderr | 14 |
2 files changed, 46 insertions, 0 deletions
diff --git a/src/test/ui/inference/issue-104649.rs b/src/test/ui/inference/issue-104649.rs new file mode 100644 index 00000000000..4637b884d44 --- /dev/null +++ b/src/test/ui/inference/issue-104649.rs @@ -0,0 +1,32 @@ +type Result<T, E = Error> = ::std::result::Result<T, E>; +struct Error; + +trait ForEach { + type Input; + fn for_each<F, U>(self, f: F) + where + F: FnOnce(Self::Input) -> U; +} + +impl<T> ForEach for A<T> { + type Input = T; + fn for_each<F, U>(self, f: F) + where + F: FnOnce(Self::Input) -> U, + { + todo!() + } +} + +struct A<T>(T); + +fn main() { + let a = A(Result::Ok(Result::Ok(()))); //~ ERROR type annotations needed + a.for_each(|a: Result<_>| { + let f = || match a { + Ok(Ok(a)) => {} + Ok(Err(a)) => {} + Err(a) => {} + }; + }); +} diff --git a/src/test/ui/inference/issue-104649.stderr b/src/test/ui/inference/issue-104649.stderr new file mode 100644 index 00000000000..4962b21f9fd --- /dev/null +++ b/src/test/ui/inference/issue-104649.stderr @@ -0,0 +1,14 @@ +error[E0282]: type annotations needed for `A<std::result::Result<std::result::Result<(), E>, Error>>` + --> $DIR/issue-104649.rs:24:9 + | +LL | let a = A(Result::Ok(Result::Ok(()))); + | ^ + | +help: consider giving `a` an explicit type, where the type for type parameter `E` is specified + | +LL | let a: A<std::result::Result<std::result::Result<(), E>, Error>> = A(Result::Ok(Result::Ok(()))); + | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0282`. |
