be44860ab9
This fixes #111220 by checking the privacy of tuple constructors using `Self`, so the following code now errors ```rust mod my { pub struct Foo(&'static str); } impl AsRef<str> for my::Foo { fn as_ref(&self) -> &str { let Self(s) = self; // previously compiled, now errors correctly s } } ```
34 lines
476 B
Rust
34 lines
476 B
Rust
mod b {
|
|
pub struct A(u32);
|
|
}
|
|
|
|
trait Id {
|
|
type Assoc;
|
|
}
|
|
impl Id for b::A {
|
|
type Assoc = b::A;
|
|
}
|
|
impl Id for u32 {
|
|
type Assoc = u32;
|
|
}
|
|
|
|
|
|
trait Trait<T> {
|
|
fn method(&self)
|
|
where
|
|
T: Id<Assoc = b::A>;
|
|
}
|
|
|
|
impl<T: Id> Trait<T> for <T as Id>::Assoc {
|
|
fn method(&self)
|
|
where
|
|
T: Id<Assoc = b::A>,
|
|
{
|
|
let Self(a) = self;
|
|
//~^ ERROR: tuple struct constructor `A` is private
|
|
println!("{a}");
|
|
}
|
|
}
|
|
|
|
fn main() {}
|