Apparently equivalent programs do not behave the same
⚓ Rust 📅 2026-03-10 👤 surdeus 👁️ 1I had an issue in my code base I didn't understand, so I minimized it to the following (which does not compile)
trait Env<'arena> {
type Arena;
fn init() -> Self::Arena;
}
fn eval_arena<'arena, E: Env<'arena>>(_: &'arena E::Arena) {
todo!()
}
fn eval_bool<E: for<'arena> Env<'arena>>() {
let arena = E::init();
eval_arena::<E>(&arena);
}
but turns out that explicitly naming E::Arena apparently makes it work (the following compiles)
trait Env<'arena> {
type Arena;
fn init() -> Self::Arena;
}
fn eval_arena<'arena, E: Env<'arena>>(_: &'arena E::Arena) {
todo!()
}
fn eval_bool<T, E: for<'arena> Env<'arena, Arena = T>>() {
let arena = E::init();
eval_arena::<E>(&arena);
}
Why?
5 posts - 3 participants
🏷️ Rust_feed