#include <iostream>
// from header 1
#pragma pack(push)
#pragma pack(1)
struct my_internal_buisiless {
int cool_story;
char magic;
int another_cool_story;
};
#pragma pack(pop)
// from header 2
#pragma pack(push)
#pragma pack(2)
struct not_your_buisiness {
char magic[2];
float flop;
};
#pragma pack(pop)
// from header 3
struct widget {
int blahblah;
struct my_internal_buisiless business[4];
struct not_your_buisiness nope[4];
};
struct struct1 {
int element0;
struct {
int element0;
char element1;
int element2;
} element1[4];
struct {
char element0[2];
float element1;
} element2[4];
};
int main(int argc, char* argv[])
{
std::cout << "widget size: " << sizeof(widget)
<< "\nmetaprog shit size: " << sizeof(struct1) << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLy8gZnJvbSBoZWFkZXIgMQojcHJhZ21hIHBhY2socHVzaCkKI3ByYWdtYSBwYWNrKDEpCnN0cnVjdCBteV9pbnRlcm5hbF9idWlzaWxlc3MgewoJaW50IGNvb2xfc3Rvcnk7CgljaGFyIG1hZ2ljOwoJaW50IGFub3RoZXJfY29vbF9zdG9yeTsKfTsKI3ByYWdtYSBwYWNrKHBvcCkKCi8vIGZyb20gaGVhZGVyIDIKI3ByYWdtYSBwYWNrKHB1c2gpCiNwcmFnbWEgcGFjaygyKQpzdHJ1Y3Qgbm90X3lvdXJfYnVpc2luZXNzIHsKCWNoYXIgbWFnaWNbMl07CglmbG9hdCBmbG9wOwp9OwojcHJhZ21hIHBhY2socG9wKQoKLy8gZnJvbSBoZWFkZXIgMwpzdHJ1Y3Qgd2lkZ2V0IHsKCWludCBibGFoYmxhaDsKCXN0cnVjdCBteV9pbnRlcm5hbF9idWlzaWxlc3MgYnVzaW5lc3NbNF07CglzdHJ1Y3Qgbm90X3lvdXJfYnVpc2luZXNzIG5vcGVbNF07Cn07CgoKc3RydWN0IHN0cnVjdDEgewoJaW50IGVsZW1lbnQwOwoJc3RydWN0IHsKCQlpbnQgZWxlbWVudDA7CgkJY2hhciBlbGVtZW50MTsKCQlpbnQgZWxlbWVudDI7Cgl9IGVsZW1lbnQxWzRdOwoJc3RydWN0IHsKCQljaGFyIGVsZW1lbnQwWzJdOwoJCWZsb2F0IGVsZW1lbnQxOwoJfSBlbGVtZW50Mls0XTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKCXN0ZDo6Y291dCA8PCAid2lkZ2V0IHNpemU6ICIgPDwgc2l6ZW9mKHdpZGdldCkKCQk8PCAiXG5tZXRhcHJvZyBzaGl0IHNpemU6ICIgPDwgc2l6ZW9mKHN0cnVjdDEpIDw8ICJcbiI7Cn0=