This size may contain padding bytes. If there were two consecutive T in memory, the padding would be the offset in bytes between element at index 0 and the element at index 1.
Packed structs are represented in memory using a backing integer (u24 in your case). Access to fields is essentially a convenience feature around bitshifts. This means the backing integer is subject to the same alignment rules as regular integers (u24 will align to 4 bytes). This means you will have padding in the most significant bits (highest memory address for little endian systems, lowest memory address for big endian systems).
Some more reading:
Better documentation about the memory layout of packed structs is needed, but nobody has gotten around to it yet.
What is the offset of the [1] element from the [0] element? That’s what @sizeOf returns; whether or not A is packed is irrelevant. The ‘padding’ in this instance is the extra byte between the [0] element and the [1] element.
If you want a packed array without padding between elements, see the types in std.packed_int_array