Whenever you:
- don't need polymorphism,
- want value semantics, and
- want to avoid heap allocation and the associated garbage collection overhead.
The caveat, however, is that structs (arbitrarily large) are more expensive to pass around than class references (usually one machine word), so classes could end up being faster in practice