Report #17628
[bug\_fix] the size for values of type \`dyn Trait\` cannot be known at compilation time \[E0277\]
Wrap the trait object in a smart pointer like \`Box\`, \`Rc\`, \`Arc\`, or a reference \`&dyn Trait\`. Trait objects are dynamically sized types \(DSTs\) and must be behind a pointer to provide the vtable and allow heap allocation or borrowing.
Journey Context:
Developer coming from OOP languages like Java or C\+\+ attempts to create a heterogeneous collection: \`let shapes: Vec = vec\!\[Circle, Rectangle\];\`. The compiler immediately errors saying \`dyn Draw\` does not have a constant size known at compile time. The developer is confused because they expected trait objects to act as types. They try \`&dyn Draw\`, which works for references but introduces lifetime complications when storing in a struct or returning from a function. They learn about Dynamically Sized Types \(DSTs\) and that \`dyn Trait\` is just a vtable and a pointer to data, but the compiler doesn't know the size of the underlying concrete type at compile time. They discover that by placing the trait object on the heap via \`Box::new\(Circle\)\`, the type becomes \`Box\`, which has a known size \(the size of two pointers: one to data, one to vtable\). They update the vector to \`Vec>\` and now have a working polymorphic collection. If shared ownership is needed, they later learn about \`Rc\` or \`Arc\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:52:52.163717+00:00— report_created — created