// Не-POD тип:
struct Rect
{
uint32_t coords[4];
Rect()
{
coords[0] = coords[1] = coords[2] = coords[3] = 0;
}
};
// ...
// Создаём на стеке массив
Rect maxrects[some_size * 2]; // fatal error <---
Ошибка компиляции через clang на строке со стрелкой:
fatal error: variable length array of non-POD element type
gcc жрёт не возражая.
А в чём физическая проблема скомпилить сабжевый массив переменной длины? Просто подвинул смещение на стеке (регистр ESP или что там я уже не помню) на переменное число элементов и всё, массив создан. И какая ему здесь разница, POD или не POD? Ну для не-POD вызвал конструктор на каждый элемент и всё, в чём проблема?
Ну стандарт запрещает, ок, но ведь для запрета нет никаких существенных оснований - вон даже gcc решил на этот запрет болт забить. Ну варнинг бы выдали, зачем фатал еррор? Чё такого-то, ни одно животное же не страдает нигде.
НЕ НАДО пейсать фтопеге, что стандарт это запрещает. Вопрос о том, почему это есть так.
Ладно, нашёл вот чтива кусок по сабжу: http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c — срач именно по вопросу о том, какого хрена это возникло в стандарте. Выглядит неубедительно всё равно: как-то непохоже на плюсовщиков, где выстрел в ногу никогда не осуждался.