El operador sizeof de C admite dos formas de operando: una expresión unaria o un nombre de tipo entre paréntesis. Una estrategia intuitiva de análisis sintáctico consiste en mirar si hay paréntesis de apertura y, si los hay, intentar leer un nombre de tipo; si falla, se devuelven los paréntesis al flujo de tokens y se procesa como expresión. Esa estrategia funciona para los casos habituales, pero se complica con los literales compuestos, una construcción sintáctica poco conocida que permite escribir expresiones como sizeof(int){0}, perfectamente válida en C. El problema se agrava porque un literal compuesto puede ir seguido de cualquier número de operadores postfijo —acceso a miembros, indexación o llamada a función—, como en sizeof(T){}.x0. Para resolverlo, el analizador debe ampliar el caso especial del literal compuesto y aceptar esos operadores, o bien diseñar una función que intente en paralelo una expresión unaria y un nombre de tipo entre paréntesis, sin necesidad de marcha atrás. Esta segunda vía exige cuidado: fusionar el análisis de expresiones unarias y de expresiones con conversión (cast) parece eficiente, pero produce ambigüedades. El ejemplo sizeof(int)+1 se interpretaría como una suma en lugar del tamaño de un valor int, por lo que mantener separadas ambas rutas de análisis es imprescindible. El autor señala que todas estas dificultades también afectan a _Countof, el operador que el borrador C2Y ha introducido recientemente como alternativa más segura a sizeof.
