mirror of https://github.com/rust-lang/rust
44 lines
919 B
Rust
44 lines
919 B
Rust
//@ run-rustfix
|
|
#![allow(unused)] // for the fixed file
|
|
|
|
trait Trait<T = Self> {
|
|
type A;
|
|
|
|
fn func(&self) -> Self::A;
|
|
}
|
|
|
|
struct S<T>(T);
|
|
impl<K> S<K> {
|
|
fn foo<'a, T: Trait + 'a>(&self, _: impl Trait, x: impl Trait<A = usize>, _: T) {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn ban<T>(x: T) where T: Trait<A = usize> {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
}
|
|
|
|
fn foo<'a, T: Trait + 'a>(_: impl Trait, x: impl Trait<A = usize>, _: T) {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn bar<T: Trait<A = usize>>(x: T) {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn foo2(x: impl Trait<i32, A = usize>) {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn bar2<T: Trait<i32, A = usize>>(x: T) {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn ban<T>(x: T) where T: Trait<A = usize> {
|
|
qux(x.func()) //~ ERROR mismatched types
|
|
}
|
|
|
|
fn qux(_: usize) {}
|
|
|
|
fn main() {}
|