**C:**
```c
struct node {
enum type; // Must track type
union {
struct { int value; } intval;
struct { ... } oper2;
};
};
```
**Rust:**
```rust
enum ParseNode {
IntVal { value: i32 },
Oper2 { left: Box<...>, ... },
}
// Type is the variant itself!
```
---
## Why Box<T>?
This won't compile:
```rust
enum ParseNode {
IntVal { value: i32 },
Oper2 { left: ParseNode, right: ParseNode }, // ERROR!
}
```
**Error**: `ParseNode` would have infinite size!
**Solution**: Use `Box