I was trying to create an uninitialized boxed trait object wrapped inside a MaybeUninit
.
trait Foo {}
const fn test() {
// Error!
let _bar: MaybeUninit<Box<dyn Foo>> = MaybeUninit::uninit();
}
The compiler gives me the following error.
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
I don't understand why the compiler talks about trait bounds as my function does not have any generic parameter.
I found a way around, just by wrapping the Box<dyn Foo>
into another structure.
trait Foo {}
struct BoxedFoo(Box<dyn Foo>);
const fn test() {
// It works!
let _bar: MaybeUninit<BoxedFoo> = MaybeUninit::uninit();
}
And it works.
Why does wrapping the box makes any difference? How does first case has to do with trait bounds but not the second one?