Я сейчас в шоке, но уже почти отошел.

Выяснилось, что все это время в С++ можно было так
#include <iostream>
int main() {
size_t size;
std::cin >> size;
int array[size];
}

Т.е. создавать массив динамического размера на стеке! Вот так просто! А я к ЕГЭ готовился и new/delete осваивал, чтобы задачки закодить как надо.

Чуть легче мне стало, когда мне сказали, что все-таки это не по стандарту.

Я перебрал кучу компиляторов и версий языка - можно! Только clang 3.2 сдался, а g++ ниже 4.1.2 не нашел.

А потом я добрался до msvc и увидел заветное
error C2131: expression did not evaluate to a constant

Я до 2018 года только msvc пользовался и знать не знал какая жуть может происходить. Мне нужно выпить.

5 comments

Познаём C++ вместе с Олежиком
Ну такой баян же. Ещё скажи, что о @procxx не знал
Ostap
Ну такой баян же. Ещё скажи, что о @procxx не знал
А я вот очень рад, что C++ все еще может меня настолько удивлять!
Ну это undefined behavior думаю, и не стоит так делать?)
Vadim Uvarov
Ну это undefined behavior думаю, и не стоит так делать?)
Это просто не по стандарту, но компиляторы и не являются полным отражением стандарта