Это компилируется, потому что размер действительно постоянен.
int main() {
const int size{ 10 };
char array[size];
}
Это, однако, не скомпилируется, потому что размер является постоянной переменной, а не постоянной времени компиляции (есть небольшая разница)
void foo(const int size) {
char array[size];
}
причина, по которой это не сработает, в том, что я могу вызвать foo с разными аргументами.
foo(10);
foo(42);
foo(1);
Самый простой способ - использовать std :: vector, что вы и пытаетесь сделать ...
void foo(const int size) {
std::vector<char> array(size);
}
и теперь массив будет работать с то же самое намерение, что и ваш исходный код.