В N3337, я читаю §23.3.2.1/3 говорится:Что означает «за исключением того, что построенный по умолчанию массив не пуст» означает?
An
array
удовлетворяет все требования контейнера и одного обратимой емкости (23.2), за исключением, что по умолчанию построеныarray
Объект не пуст, и этот обмен не имеет постоянной сложности.
В §23.2.1, Таблица 96 Контейнерные Требования, он показывает по умолчанию строится объект в X u;
где пост условие u.empty()
. Предположительно тогда следующее:
std::array<int, 0> a;
должно приводить с a.empty()
вывода 1
, что она делает. Так что же означает «пусто»?
А как насчет 'std :: array a;'? –
immibis
'a.empty()' истинно в этом случае, потому что 'N == 0', а не потому, что он был сконструирован по умолчанию. И фраза «за исключением того, что ... не пусто» явно делает исключение из требования, а это означает, что построенный по умолчанию массив не должен быть пустым (поскольку его пустота зависит только от значения его постоянного размера N). Я согласен с тем, что он плохо сформулирован, никто не идеален, и писать стандартное лингво сложно, дать этим парням перерыв и прекратить прокручивать проходы, особенно те, где реальный смысл настолько очевиден. –