Gibt es einen Grund für ein std :: array mit der Größe Null in C ++ 11?

Betrachten Sie den folgenden Code, der von einem C ++ 11-Compiler durchaus akzeptiert wird:

#include <array>
#include <iostream>

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

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

  return 0;
}

Nach der Norm § 23.3.2.8 [Arrays ohne Größe]:

1 Array soll den Sonderfall unterstützenN == 0.

2 In diesem FallN == 0, begin() == end() == Einzigartiger Wert. Der Rückgabewert von
data() ist nicht spezifiziert.

3 Die Wirkung von Anrufenfront() oderback() für ein Array mit der Größe Null ist nicht definiert.

4 Mitgliedsfunktionswap() muss eine No-Except-Spezifikation haben, die äquivalent ist zunoexcept(true).

Wie oben angezeigt, Größe Nullstd::arrays sind in C ++ 11 im Gegensatz zu Arrays mit der Größe Null (z. B.int A[0];), wo sie ausdrücklich verboten sind, jedoch von einigen Compilern (z. B. GCC) als Kosten für undefiniertes Verhalten zugelassen werden.

Angesichts dieses "Widerspruchs" habe ich folgende Fragen:

Warum das C ++ - Komitee beschlossen hat, die Größe Null zuzulassenstd::arrays?

Gibt es wertvolle Verwendungen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage