Skip to content

Commit

Permalink
inference test for rust-lang#104649
Browse files Browse the repository at this point in the history
  • Loading branch information
dingxiangfei2009 committed Nov 27, 2022
1 parent daf93df commit 9cd12cd
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/test/ui/inference/issue-104649.rs
Original file line number Diff line number Diff line change
@@ -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) => {}
};
});
}
14 changes: 14 additions & 0 deletions src/test/ui/inference/issue-104649.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 9cd12cd

Please sign in to comment.