С++ инициализирует размер массива, используя постоянную переменную

Я заметил, что компилятор G++ разрешает инициализировать такой массив:

vector<vector<string> > partition(string s) {
    const int len = s.size();
    vector<vector<string> > subPalins[len+1] ;
    subPalins[0] = vector<vector<string> >();
    subPalins[0].push_back(vector<string>());
    bool isPalin[len][len];
...
    return subPalins[len];
}

Размер массива subPalins равен len, что является постоянной переменной. Я помню, что нельзя инициализировать массив переменного размера, так как размер массива должен быть определен во время компиляции. Хотя len здесь является константой, это все же переменная, и я не понимаю, почему это разрешено.


person eaglesky    schedule 27.08.2014    source источник
comment
Массивы переменной длины разрешены в C++ расширением в gcc. будет работать в стандартном C++, если вы использовали целочисленный литерал, метод size не является функцией constexpr.   -  person Shafik Yaghmour    schedule 27.08.2014
comment
g++ поддерживает массивы переменной длины в стиле C99 в качестве расширения.   -  person T.C.    schedule 27.08.2014
comment
I noticed that G++ compiler does permit initializing an array like this: Если вы скомпилировали с параметрами -Wall -pedantic, вы увидите, что g++ выдает ошибку.   -  person PaulMcKenzie    schedule 27.08.2014