Report #78276
[bug\_fix] the size for values of type \`dyn Trait\` cannot be known at compilation time
Place the trait object behind a pointer type: \`Box\`, \`&dyn Trait\`, \`Rc\`, or \`Arc\`. Root cause: \`dyn Trait\` is a Dynamically Sized Type \(DST\); the compiler cannot know the size of the concrete type at compile time, so it cannot allocate space on the stack. Pointers to DSTs are "fat pointers" \(carrying a vtable\) and have a known size.
Journey Context:
You're trying to create a heterogeneous collection of types that share a trait, like \`Vec\`. You write \`let shapes: Vec = vec\!\[Circle, Square\];\` and immediately get the error "the size for values of type \`dyn Drawable\` cannot be known at compilation time". You think "but I'm using a trait object, that's what polymorphism is\!" You try \`&dyn Drawable\` and it works for a single item, but you can't store references in the Vec because they have different lifetimes. You search and learn that \`dyn Trait\` is unsized. You try \`Box::new\(Circle\) as Box\` and collect those into a \`Vec>\`. This works because \`Box\` has a known size \(a pointer\) even though the pointee does not. The journey teaches you about Rust's memory model: stack allocations require static sizes, while heap allocations \(via Box\) can handle DSTs, and trait objects use vtables \(fat pointers\) for dynamic dispatch.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T13:58:56.113090+00:00— report_created — created