> -- Иван Кузьмицкий писал(а):
> ASSERT'ы нужны, чтобы как можно раньше наступить на все возможные грабли. Тогда будет уверенность в дальнейшей правильной работе.

Во-первых на эти грабли будем наступать не мы, а пользователь этого кода.
Во-вторых ASSERT по сути срабатывает только при тестировании. Т.е. совершенно нет никаких гарантий, что во время тестирования оно вылезет. А во время уже запуска в эксплуатацию программа не имеет права упасть. И тут то становится плохо -- во многих языках ASSERT из релиза убирается. Соответственно имеем возможность некорректной работы приложения (проверку то убрали!), что черевато чем угодно вообще. Если же ASSERT не убрать, то если прилетит не верное значение аргумента функции, то программа упадет => взорвётся ракета, упадет самолет, город останется без связи и т.п. Особенно подобное обидно, если ошибка гнездилась в совершенно некритичным (с т.з. полезности для конечного пользователя -- пассажира самолета например) модуле. Например в каком-нибудь логгере, или чем-то подобном. Т.е. часто лучше пусть эта функция не сработает вообще чем обвалит всю систему.