Я глубоко убеждён, что константные типы недооцениваются разработчиками компиляторов и, как итог, разработчиками. Константы должны задавать не просто "неизменяемые" данные с удобным доступом, но и участвовать в прекомпиляции (условной компиляции).
Скажем у нас есть такой псевдо-код:
Логично, что после прекомпиляции компилятор должен получить следующий код:
И не нужно изобретать какие-то дополнительные конструкции условной компиляции. Т.е. необязательно полностью вычислять всю программу, достаточно хотя бы адекватно обсчитать все константы и условия (на невыполнимость и выпилить такие, и на выполнимость и убрать само условие, оставив сам блок), чтобы всем было удобно.