Вероятность ошибки всегда нужно умножать на время. Даже если ты внимателен и выявляешь 99% подобных ошибок на глаз, то через всего сотню таких ситуаций, ты 1 раз ошибёшься.
Ну, в крестах есть контекстные аналоги - union, enum и std::variant. Чем эти аналогии плохи?
Union не хранит активный вариант, enum не позволяет прикреплять данные к вариантам, std::variant — адок с неудобным std::visit и невозможностью задать два варианта с одинаковыми типами