#include <iostream>
#include <cstdint>
#include <cstddef>
using std::size_t;
struct head_t { size_t size; int data[]; };
int main() {
head_t* h = static_cast<head_t*>(::operator new(sizeof(head_t) + 10 * sizeof(int)));
h->size = 10;
int* my_10_ints = h->data;
// Oh noez! I forgot 10!
size_t what_was_10_again = static_cast<head_t*>(static_cast<void*>(my_10_ints) - offsetof(head_t, data))->size;
::std::cout << what_was_10_again << "\n";
::operator delete(static_cast<void*>(my_10_ints) - offsetof(head_t, data));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPGNzdGRkZWY+CnVzaW5nIHN0ZDo6c2l6ZV90OwoKc3RydWN0IGhlYWRfdCB7IHNpemVfdCBzaXplOyBpbnQgZGF0YVtdOyB9OwoKaW50IG1haW4oKSB7CgloZWFkX3QqIGggPSBzdGF0aWNfY2FzdDxoZWFkX3QqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoaGVhZF90KSArIDEwICogc2l6ZW9mKGludCkpKTsKCWgtPnNpemUgPSAxMDsKCWludCogbXlfMTBfaW50cyA9IGgtPmRhdGE7CgkvLyBPaCBub2V6ISBJIGZvcmdvdCAxMCEKCXNpemVfdCB3aGF0X3dhc18xMF9hZ2FpbiA9IHN0YXRpY19jYXN0PGhlYWRfdCo+KHN0YXRpY19jYXN0PHZvaWQqPihteV8xMF9pbnRzKSAtIG9mZnNldG9mKGhlYWRfdCwgZGF0YSkpLT5zaXplOwoJOjpzdGQ6OmNvdXQgPDwgd2hhdF93YXNfMTBfYWdhaW4gPDwgIlxuIjsKCTo6b3BlcmF0b3IgZGVsZXRlKHN0YXRpY19jYXN0PHZvaWQqPihteV8xMF9pbnRzKSAtIG9mZnNldG9mKGhlYWRfdCwgZGF0YSkpOwp9