Hello,
I asked on Zulip but couldn't get any responses, so trying here.
In this program
trait Restriction {
type Inner;
}
trait Database: Restriction<Inner = u32> {}
struct Test {}
impl Database for Test {}
impl Restriction for Test {
type Inner = u32;
}
fn main() {
let t = Test {};
let _x: &dyn Database<Inner = _> = &t;
}
If I add some debug prints in mir's type checker I see that the annotated type for _x
is &dyn Database<Inner = _, Inner = u32>
and normalized type is &dyn Database<Inner = u32, Inner = u32>
. I'm confused about why we have two Inner
s in these types when the user-written type only has one associated type.
Intersetingly if I remove the _
part (what is it called?) the type becomes &dyn Database<Inner = u32>
.
Is this expected? Could anyone point me to some relevant documentation/code?
I tried enabling trace logs and reading the rustc_typeck code, but couldn't figure out.
Thanks.