This works:

```
trait A {
fn to_boxed_b(self: Box<Self>) -> Box<B> where Self: 'static;
}
impl<T> A for T {
fn to_boxed_b(self: Box<Self>) -> Box<B> where Self: 'static {
Box::new(*self) as _
}
}
trait B {}
impl<T: A> B for T {}
fn boxed_a() -> Box<A> { unimplemented!() }
fn main() {
boxed_a().to_boxed_b();
}
```

This doesn’t:

```
trait A {
fn to_boxed_b(self: Box<Self>) -> Box<B> where Self: 'static {
Box::new(*self) as _
}
}
trait B {}
impl<T: A> B for T {}
fn boxed_a() -> Box<A> { unimplemented!() }
fn main() {
boxed_a().to_boxed_b();
}
```

I’ve tried many variations. Is there any way to make the default fn work? If not, why not?