32 lines
629 B
Rust
32 lines
629 B
Rust
|
// check-pass
|
||
|
// known-bug: #100051
|
||
|
|
||
|
// 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);
|
||
|
}
|