Я хотел бы использовать отрицательный индекс массива для доступа к члену того же типа, который непосредственно предшествует этому массиву в структуре.
Рассмотрим этот тип кода:
union hello {
int a[2];
struct { int b0; int b1[1]; };
};
Я хочу использовать b1[-1]
для доступа к b0
.
Когда я пытаюсь это сделать, кажется, что clang и gcc точно понимают, чего я хочу.
extern const int test = hello{{42, 1337}}.b1[-1];
Это правильно определяет во время компиляции, что test
действительно 42
.
К сожалению, clang выдает предупреждение, что -1
не связан. Gcc делает то же самое, если я изменяю const
на constexpr
.
Как правильно написать код такого типа?
Вот способы, которые я уже знаю, но не люблю:
- Используйте
a[]
с индексированием на основе 1.
- Сделать
b1
указателем, который указывает на a[1]
.