You're squeaking by based on lifetime variance here. It's trivial to construct an example where variance doesn't apply:
trait Special {
fn special(&mut self);
}
impl<T> Special for (T, T) {
fn special(&mut self) {
println!("specialized");
}
}
fn pair<'a, 'b, T>(ts: &mut (&'a T, &'b T)) {
ts.special();
}
fn main() {
pair(&mut (&"hi", &"there"));
}
Mutability forces the lifetimes to be invariant, so now the impl doesn't apply unless the lifetimes are identical.