Просто подытожив мои выводы из комментариев (спасибо Некоторому программисту, чувак за ввод) ...
Вы смешиваете две проблемы, которые лучше разделить:
a) значениеперечисление может быть недействительным
b) потоковая передача на os
может завершиться с ошибкой
Можно утверждать, что a) на самом деле не относится к перегрузке operator<<
.Если вы хотите убедиться, что перечисление допустимо, то вы можете проверить это, возможно, и в других местах, а не только при потоковой передаче.На самом деле вы должны сделать это раньше, чтобы иметь возможность обнаружить ошибку как можно скорее, а не только когда она достигает пользователя / внешнего мира.С другой стороны, от макушки головы я не знаю, как вы могли бы достичь default
с помощью enum с определенными границами, если только вы сознательно не пытаетесь сделать что-то не так.В этом случае вы просто получаете то, что заслуживаете.Не будь чрезмерной защитой.
Для б) вам не нужно делать ничего лишнего в вашем коде.Если
os << "1";
произойдет сбой, то этот вызов уже установит бит сбоя для вас.
TL; DR: вам, вероятно, не нужен чек в operator<<
.Если вы считаете, что вам нужен чек, то operator<<
все еще не подходящее место для его установки.