apparently recent gcc versions have intentionally broken the traditional definition by treating it as a non-constant expression. the traditional definition may also be problematic for c++ programs.