есть такая структурка:
struct x { int i; ... char buf[4096 - ???]; };
проблема в размере buf. должно быть так:
static_assert(sizeof(struct x) == 4096);
как написать там нужный размер без боли? очевидный вариант не проходит:
struct x { int i; ... char buf[4096 - offsetof(struct x, buf)]; }; // struct x is incomplete
struct x { struct { int i; ... } y; char buf[4096 - sizeof(y)]; }; // y is undeclared
struct x { struct y { int i; ... } y; char buf[4096 - sizeof(struct y)]; }; //это работает, но как и в предыдущем случае нужно будет писать x.y.i вместо x.i
лучшее, что придумал:
struct x { union { struct { int i; ... char buf[]; }; char _[4096]; }; };
но хочется иметь простой sizeof(buf), а не костылями. есть ли способ?