| /// Discovered in https://github.com/rust-lang/rust/issues/112602. |
| /// This caused a cycle error, which made no sense. |
| /// Removing the `const` part of the `many` function would make the |
| /// test pass again. |
| /// The issue was that we were running const qualif checks on |
| /// `const fn`s, but never using them. During const qualif checks we tend |
| /// to end up revealing opaque types (the RPIT in `many`'s return type), |
| /// which can quickly lead to cycles. |
| |
| //@ check-pass |
| |
| pub struct Parser<H>(H); |
| |
| impl<H, T> Parser<H> |
| where |
| H: for<'a> Fn(&'a str) -> T, |
| { |
| pub const fn new(handler: H) -> Parser<H> { |
| Parser(handler) |
| } |
| |
| pub const fn many<'s>(&'s self) -> Parser<impl for<'a> Fn(&'a str) -> Vec<T> + 's> { |
| Parser::new(|_| unimplemented!()) |
| } |
| } |
| |
| fn main() { |
| println!("Hello, world!"); |
| } |