2024-02-16 14:02:50 -06:00
|
|
|
//@ check-pass
|
|
|
|
//@ known-bug: #100051
|
2023-04-22 12:41:53 -05:00
|
|
|
|
|
|
|
// Should fail. Implied bounds from projections in impl headers can create
|
|
|
|
// improper lifetimes. Variant of issue #98543 which was fixed by #99217.
|
|
|
|
|
|
|
|
trait Trait {
|
|
|
|
type Type;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> Trait for T {
|
|
|
|
type Type = ();
|
|
|
|
}
|
|
|
|
|
|
|
|
trait Extend<'a, 'b> {
|
|
|
|
fn extend(self, s: &'a str) -> &'b str;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a, 'b> Extend<'a, 'b> for <&'b &'a () as Trait>::Type
|
|
|
|
where
|
|
|
|
for<'what, 'ever> &'what &'ever (): Trait,
|
|
|
|
{
|
|
|
|
fn extend(self, s: &'a str) -> &'b str {
|
|
|
|
s
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let y = <() as Extend<'_, '_>>::extend((), &String::from("Hello World"));
|
|
|
|
println!("{}", y);
|
|
|
|
}
|