1 // empty.iso is used because there is an iso that converts sizeof(E) to
2 // sizeof E, which causes a double match in an expression, and thus a
5 @ rule1 using "empty.iso" @
9 - (sizeof(E)/sizeof(*E))
12 @ rule2 using "empty.iso" @
16 - sizeof(E)/sizeof(*E)
19 @ rule3 using "empty.iso" @
23 - (sizeof(E)/sizeof(E[E1]))
26 @ rule4 using "empty.iso" @
30 - sizeof(E)/sizeof(E[E1])
33 @ rule5 using "empty.iso" @
38 - (sizeof(E)/sizeof(T))
41 @ rule6 using "empty.iso" @
49 // ---------------------------------------------------------------------------
50 // some of the above rules with more parentheses
51 // this can't be done with an isomorphism, as described above
53 @ rule1p using "empty.iso" @
57 - (sizeof(E)/sizeof(*(E)))
60 @ rule2p using "empty.iso" @
64 - sizeof(E)/sizeof(*(E))
67 @ rule3p using "empty.iso" @
71 - (sizeof(E)/sizeof((E)[E1]))
74 @ rule4p using "empty.iso" @
78 - sizeof(E)/sizeof((E)[E1])
81 // ---------------------------------------------------------------------------
91 - #define NUM(x) ARRAY_SIZE(x)
95 identifier rule53.NUM;
105 - ((int)ARRAY_SIZE(E))