The container you reach for first, and the verbs that act on it.
Model a maybe-value with std::optional and a fixed set of alternatives with std::variant — no sentinels, no unions, no out-params.