Распределение массива в C ++ в стеке с переменной длиной [дубликат]

На этот вопрос уже есть ответ здесь:

C ++: почему массив int [размер] работает? 3 ответа

Я был удивлен, обнаружив, что в C ++ можно разместить массив переменной длины в стеке (например,int array[i];). Кажется, что он отлично работает как на clang, так и на gcc (на OS / X), но MSVC 2012 этого не позволяет.

Как называется эта языковая функция? И это официальная функция языка C ++? Если да, то какая версия C ++?

Полный пример:

#include <iostream>

using namespace std;

int sum(int *array, int length){
    int s = 0;
    for (int i=0;i<length;i++){
        s+= array[i];
    }
    return s;
}

int func(int i){
    int array[i]; // <-- This is the feature that I'm talking about
    for (int j=0;j<i;j++){
        array[j] = j;
    }

    return sum(array, i);

}

int main(int argc, const char * argv[])
{
    cout << "Func 1 "<<func(1)<<endl;
    cout << "Func 2 "<<func(2)<<endl;
    cout << "Func 3 "<<func(3)<<endl;

    return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос