I realised #[requires]
might be just enough to address this:
trait Consume {
fn consume(self) where Self: Sized;
fn consume_boxed(self: Box<Self>);
#[requires(consume)]
default {
fn consume_boxed(self: Box<Self>) {
Self::consume(*self)
}
}
}