2024-04-15 06:20:33 -05:00
|
|
|
//! Check that the method call does not constrain the RPIT to `i32`, even though
|
2024-04-15 06:37:09 -05:00
|
|
|
//! `i32` is the only type that satisfies the RPIT's trait bounds.
|
2024-04-15 06:20:33 -05:00
|
|
|
|
|
|
|
//@ revisions: current next
|
|
|
|
//@[next] compile-flags: -Znext-solver
|
|
|
|
//@[current] check-pass
|
|
|
|
|
|
|
|
trait Trait {}
|
|
|
|
|
|
|
|
impl Trait for i32 {}
|
|
|
|
|
|
|
|
struct Bar<T>(T);
|
|
|
|
|
|
|
|
impl Bar<u32> {
|
|
|
|
fn bar(self) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T: Trait> Bar<T> {
|
|
|
|
fn bar(self) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn foo(x: bool) -> Bar<impl Trait> {
|
|
|
|
if x {
|
|
|
|
let x = foo(false);
|
|
|
|
x.bar();
|
|
|
|
//[next]~^ ERROR: multiple applicable items in scope
|
|
|
|
}
|
|
|
|
Bar(42_i32)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|