Нет, я что-то не совсем понимаю зачем это самое целочисленное значение ассерту скармливать. Вот смотрите: сработал ASSERT, отлично. Благодаря наличию метаинформации мы точно знаем CallStack с названиями функции, мы знаем версии всех модулей, знаем структуру функции где оно сработало. В конце концов ничто не мешает также знать и вид логического условия сработавшего ассерта. Всё это мы знаем без наличия исходников.
Если ASSERT сработал на машине пользователя, то среда должна сформировать слепок состояния программы, дамп памяти, в виде пригодном для последующего анализа. Например в виде составного документа. Этот слепок отправляется к разработчику, где он уже спокойно разбирает что там случилось. Благодаря метаинформации (см. выше) он точно будет знать какая версия чего там была установлена. Он будет знать состояние стэка вызовов и т.п. Зачем тут какое-то магическое число?
Если у нас метаинформации нет (скажем у нас не КП а Оберон, а там метаинформации ровно столько же сколько в С++ скажем), то тогда да, ASSERT должен быть поумнее. Но в этом случае опять таки не нужно число. Нужно банально печатать (если у нас нет данных о стэке вызовов): файл, строку, содержимое строки этого самого ASSERT'a (это будет нечто вроде ASSERT(a#b) ). На этапе исполнения накладных расходов тут будет ровно нуль.