Whether an array’s element is flattened through aliases and inner
arrays before the delimiter question (crate::array_is_delimited).
XTypes models a multi-dimensional array as one ARRAY_TYPE over the
base element, so the specification’s reading — and Cyclone DDS’s and
Fast DDS’s, both measured byte-identical on
resolve-array-of-typedef-array — sees typedef long Row[3]; Row grid[2]; as an array of long and writes no DHEADER. OpenDDS
stops at the alias: its generated serialiser treats the Row
element as a constructed type and writes the inner DHEADER —
measured 2026-08-24, 32 octets against 28 for the same values under
XCDR2. Orthogonal to CollectionDelimiterPolicy: OpenDDS and
Cyclone share Specification there and part here.