4Гб оперативки и OutOfMemory никак не связаны — заканчивается 2Гб виртуального адресного пространства процесса.
Функция NewProcent очень порадовала =)
А Interop — штука для неторопливых, но иногда это единственный вариант. Делал через неё раскраску файлов (regexp'ами) — за несколько часов 40k строк отчёта переварила.
Только «S s();» — это объявление функции (по крайней мере в C++03), нужно как-то так (не уверен, будет ли тут вызван конструктор копирования или нет): S s = S();
А ещё выравнивание, а ещё unicode/ansii и прочие «ой, добавили виртуальный метод». Я бы не стал так делать, это перегиб в другую сторону — менять константу придётся чаще и не всегда по делу (при портировании, например).
По поводу «добавили+удалили» — такие же изменения в enum'е можно и не отловить, лучше просто разносить правки (добавили что-то, собрали, исправили, удалили что-то и т.д.).
Честно говоря, не вижу разницы, каким способом заставить компилятор выдать ошибку (boost и новый стандарт упомянуты).
Способ с шаблонами описан по ссылке на stackoverflow, но выглядит менее лаконичным в применении, имхо.
Функция NewProcent очень порадовала =)
А Interop — штука для неторопливых, но иногда это единственный вариант. Делал через неё раскраску файлов (regexp'ами) — за несколько часов 40k строк отчёта переварила.
S s = S();
Обновил пост и попробую внедрить такой вариант у себя.
По поводу «добавили+удалили» — такие же изменения в enum'е можно и не отловить, лучше просто разносить правки (добавили что-то, собрали, исправили, удалили что-то и т.д.).
Способ с шаблонами описан по ссылке на stackoverflow, но выглядит менее лаконичным в применении, имхо.