Размер массива должен быть целочисленным константным выражением или ICE (что означает, что он должен быть известен во время компиляции). Вы можете использовать const int
в ICE, но только если его инициализатор сам является ICE.
Вызов функции, такой как keyword.size()
, не может использоваться в ICE, поэтому kwSize
не может использоваться в ICE.
Если в «gcc» он работает «отлично», то это либо из-за ошибки, либо из-за какого-либо расширения языка.
В C ++ 0x некоторые вызовы функций могут использоваться в целочисленных константных выражениях, но они должны быть constexpr
функциями и существуют ограничения на их использование. Насколько мне известно, ни один компилятор пока полностью не поддерживает constexpr
. В любом случае std::string::size
не является constexpr
.