mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
parent
f0a3643af1
commit
11495decd5
18
tests/ui/impl-trait/recursive-bound-eval.rs
Normal file
18
tests/ui/impl-trait/recursive-bound-eval.rs
Normal file
@ -0,0 +1,18 @@
|
||||
pub trait Parser<E> {
|
||||
fn parse(&self) -> E;
|
||||
}
|
||||
|
||||
impl<E, T: Fn() -> E> Parser<E> for T {
|
||||
fn parse(&self) -> E {
|
||||
self()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn recursive_fn<E>() -> impl Parser<E> {
|
||||
//~^ ERROR: cycle detected
|
||||
move || recursive_fn().parse()
|
||||
//~^ ERROR: type annotations needed
|
||||
//~| ERROR: no method named `parse` found for opaque type
|
||||
}
|
||||
|
||||
fn main() {}
|
42
tests/ui/impl-trait/recursive-bound-eval.stderr
Normal file
42
tests/ui/impl-trait/recursive-bound-eval.stderr
Normal file
@ -0,0 +1,42 @@
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/recursive-bound-eval.rs:13:28
|
||||
|
|
||||
LL | move || recursive_fn().parse()
|
||||
| ^^^^^ cannot infer type
|
||||
|
||||
error[E0599]: no method named `parse` found for opaque type `impl Parser<_>` in the current scope
|
||||
--> $DIR/recursive-bound-eval.rs:13:28
|
||||
|
|
||||
LL | move || recursive_fn().parse()
|
||||
| ^^^^^ method not found in `impl Parser<_>`
|
||||
|
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
help: trait `Parser` which provides `parse` is implemented but not in scope; perhaps you want to import it
|
||||
|
|
||||
LL + use Parser;
|
||||
|
|
||||
|
||||
error[E0391]: cycle detected when computing type of opaque `recursive_fn::{opaque#0}`
|
||||
--> $DIR/recursive-bound-eval.rs:11:29
|
||||
|
|
||||
LL | pub fn recursive_fn<E>() -> impl Parser<E> {
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires type-checking `recursive_fn`...
|
||||
--> $DIR/recursive-bound-eval.rs:13:13
|
||||
|
|
||||
LL | move || recursive_fn().parse()
|
||||
| ^^^^^^^^^^^^^^
|
||||
= note: ...which requires evaluating trait selection obligation `recursive_fn::{opaque#0}: core::marker::Unpin`...
|
||||
= note: ...which again requires computing type of opaque `recursive_fn::{opaque#0}`, completing the cycle
|
||||
note: cycle used when computing type of `recursive_fn::{opaque#0}`
|
||||
--> $DIR/recursive-bound-eval.rs:11:29
|
||||
|
|
||||
LL | pub fn recursive_fn<E>() -> impl Parser<E> {
|
||||
| ^^^^^^^^^^^^^^
|
||||
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0391, E0599.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
Loading…
Reference in New Issue
Block a user