Есть ли причина для нулевого размера std :: array в C ++ 11?

Рассмотрим следующий фрагмент кода, который вполне приемлем для компилятора C ++ 11:

#include <array>
#include <iostream>

auto main() -> int {
  std::array<double, 0> A;

  for(auto i : A) std::cout << i << std::endl;

  return 0;
}

Согласно стандарту § 23.3.2.8 [Массивы нулевого размера]:

1 Массив должен обеспечить поддержку для особого случаяN == 0.

2 В том случае, еслиN == 0, begin() == end() == уникальная ценность. Возвращаемое значение
data() не указано.

3 Эффект вызоваfront() или жеback() для массива нулевого размера не определено.

4 Функция-членswap() должен иметь noexcept-спецификацию, которая эквивалентнаnoexcept(true).

Как показано выше, нулевой размерstd::arrays вполне допустимы в C ++ 11, в отличие от массивов нулевого размера (например,int A[0];) где они явно запрещены, но некоторые компиляторы (например, GCC) допускают их за счет неопределенного поведения.

Учитывая это «противоречие», у меня возникают следующие вопросы:

Почему комитет C ++ решил разрешить нулевой размерstd::arrays?

Есть ли какие-либо ценные использования?

Ответы на вопрос(4)

Ваш ответ на вопрос