Почему массив создается (а он создается, глюков каких-то поймать не смог пока), компилятор не ругается, хотя его размер на момент компиляции не известен?
Поскольку массивам фиксированного размера память выделяется во время компиляции, то здесь мы имеем два ограничения:
Массивы фиксированного размера не могут иметь длину, основанную на любом пользовательском вводе или другом значении, которое вычисляется во время выполнения программы (runtime).
Фиксированные массивы имеют фиксированную длину, которую нельзя изменить.
На мой взгляд они идентичны - размер массива задается в ходе выполнения программы, во время компиляции он неизвестен. Однако первый пример компилируется и работает (для меня неожиданно), а второй не компилируется с ошибкой выражение должно иметь константное значение переменная size (объявлено в строке 1) невозможно использовать как константу (для меня ожидаемо). Почему так происходит. Уважаемый rkit упомянул про изменение стандартов, возможно он сможет ткнуть носом где почитать про изменения в этом вопросе?
Вообще-то нельзя (хотя, я не помню, как в стандарте 2020, сейчас гляну). Все стандарты до 2017 включительно, требовали там константу или константное выражение.