Zanim C został ujednolicony, wiele kompilatorów nie miałoby trudności z obsługą typów o zerowym rozmiarze, o ile kod nigdy nie próbowałby odjąć jednego wskaźnika do typu o zerowym rozmiarze od drugiego. Takie typy były pożyteczne, a ich wspieranie było łatwiejsze i tańsze niż zakazanie im. Inni kompilatorzy zdecydowali się jednak zabronić takich typów, a niektóre kody z asercjami statycznymi mogły opierać się na fakcie, że wyskakiwałyby, gdyby kod próbował utworzyć tablicę o rozmiarze zerowym. Autorzy normy stanęli przed wyborem:
Zezwalaj kompilatorom na ciche akceptowanie deklaracji tablic o rozmiarze zerowym, nawet w przypadkach, gdy celem takich deklaracji byłoby wywołanie diagnostyki i przerwanie kompilacji, i wymaganie, aby wszystkie kompilatory akceptowały takie deklaracje (choć niekoniecznie po cichu) jako wytwarzające obiekty o rozmiarze zerowym .
Zezwalaj kompilatorom na ciche akceptowanie deklaracji tablic o rozmiarze zerowym, nawet w przypadkach, gdy celem takich deklaracji byłoby wyzwolenie diagnostyki i przerwanie kompilacji, oraz zezwolenie kompilatorom napotykającym takie deklaracje na przerwanie kompilacji lub kontynuowanie jej w wolnym czasie.
Wymagaj, aby implementacje wystawiały diagnostykę, jeśli kod deklaruje tablicę o rozmiarze zerowym, ale następnie zezwalaj implementacjom na przerwanie kompilacji lub kontynuowanie jej (z dowolną semantyką, którą uznają za odpowiednią) w wolnym czasie.
Autorzy Standardu zdecydowali się na # 3. W konsekwencji deklaracje tablic o rozmiarze zerowym są traktowane przez „rozszerzenie” standardu, mimo że takie konstrukcje były szeroko obsługiwane, zanim Standard ich zabronił.
Standard C ++ zezwala na istnienie pustych obiektów, ale w celu umożliwienia używania adresów pustych obiektów jako tokenów, nakazuje, aby miały one minimalny rozmiar 1. Dla obiektu, który nie ma elementów członkowskich, rozmiar 0 naruszałoby w ten sposób standard. Jeśli jednak obiekt zawiera elementy składowe o zerowej wielkości, C ++ Standard nie nakłada żadnych wymagań dotyczących sposobu przetwarzania poza faktem, że program zawierający taką deklarację musi wyzwolić diagnostykę. Ponieważ większość kodu używającego takich deklaracji oczekuje, że wynikowe obiekty będą miały rozmiar zerowy, najbardziej użytecznym zachowaniem dla kompilatorów odbierających taki kod jest traktowanie ich w ten sposób.