60 lines
775 B
Rust
60 lines
775 B
Rust
|
// check-pass
|
||
|
//
|
||
|
// Regression test for issue #78632
|
||
|
|
||
|
#![crate_type = "lib"]
|
||
|
|
||
|
pub trait Corge<T> {
|
||
|
type Fred;
|
||
|
}
|
||
|
|
||
|
impl Corge<u8> for () {
|
||
|
type Fred = u32;
|
||
|
}
|
||
|
|
||
|
pub trait Waldo {
|
||
|
type Quax;
|
||
|
}
|
||
|
|
||
|
impl Waldo for u32 {
|
||
|
type Quax = u8;
|
||
|
}
|
||
|
|
||
|
pub trait Grault
|
||
|
where
|
||
|
(): Corge<Self::Thud>,
|
||
|
{
|
||
|
type Thud;
|
||
|
fn bar(_: <() as Corge<Self::Thud>>::Fred) {}
|
||
|
}
|
||
|
|
||
|
impl<T> Grault for T
|
||
|
where
|
||
|
T: Waldo,
|
||
|
(): Corge<T::Quax>,
|
||
|
<() as Corge<T::Quax>>::Fred: Waldo,
|
||
|
{
|
||
|
type Thud = u8;
|
||
|
}
|
||
|
|
||
|
pub trait Plugh<I> {
|
||
|
fn baz();
|
||
|
}
|
||
|
|
||
|
#[derive(Copy, Clone, Debug)]
|
||
|
pub struct Qiz<T> {
|
||
|
foo: T,
|
||
|
}
|
||
|
|
||
|
impl<T> Plugh<<() as Corge<T::Thud>>::Fred> for Qiz<T>
|
||
|
where
|
||
|
T: Grault,
|
||
|
(): Corge<T::Thud>,
|
||
|
{
|
||
|
fn baz() {}
|
||
|
}
|
||
|
|
||
|
pub fn test() {
|
||
|
<Qiz<u32> as Plugh<u32>>::baz();
|
||
|
}
|