Tristate bool - это путь к темной стороне. Tristate Bool приводит к гневу. Гнев ведет к ненависти. Ненависть ведет к страданию.
Предпочитают не использовать тристатный бул.
Вместо этого используйте один дополнительный логический параметр для определения того, является ли первый логический параметр "инициализированным" (или лучше "известным") или нет.
class Prisoner : public Person
{
...
bool is_veredict_known;
bool is_guilty;
}
Если veredict еще не известен, вы не можете сказать, действительно ли Prisoner виновен, но ваш код может различать различные ситуации. Конечно, Конституция гарантирует, что значение по умолчанию is_guilty должно быть ложным, но все же ... :)
Кстати, инвариант класса должен включать в себя:
assert(is_veredict_known || !is_guilty);