42 lines
758 B
Rust
42 lines
758 B
Rust
![]() |
// compile-pass
|
||
|
|
||
|
// Check that method probing ObjectCandidate works in the presence of
|
||
|
// auto traits and/or HRTBs.
|
||
|
|
||
|
mod internal {
|
||
|
pub trait MyObject<'a> {
|
||
|
type Output;
|
||
|
|
||
|
fn foo(&self) -> Self::Output;
|
||
|
}
|
||
|
|
||
|
impl<'a> MyObject<'a> for () {
|
||
|
type Output = &'a u32;
|
||
|
|
||
|
fn foo(&self) -> Self::Output { &4 }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn t1(d: &dyn for<'a> internal::MyObject<'a, Output=&'a u32>) {
|
||
|
d.foo();
|
||
|
}
|
||
|
|
||
|
fn t2(d: &dyn internal::MyObject<'static, Output=&'static u32>) {
|
||
|
d.foo();
|
||
|
}
|
||
|
|
||
|
fn t3(d: &(dyn for<'a> internal::MyObject<'a, Output=&'a u32> + Sync)) {
|
||
|
d.foo();
|
||
|
}
|
||
|
|
||
|
fn t4(d: &(dyn internal::MyObject<'static, Output=&'static u32> + Sync)) {
|
||
|
d.foo();
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
t1(&());
|
||
|
t2(&());
|
||
|
t3(&());
|
||
|
t4(&());
|
||
|
}
|