#include <cstdint>
#include <cstdlib>
#include <iostream>
template<typename T, size_t N>
T (&makeArray())[N] {
void* rv = malloc(sizeof(T) * N);
return *reinterpret_cast<T(*)[N]>(rv);
}
template<size_t NNew, typename T, size_t NOld>
T (&changeArraySize(T (&arr)[NOld]))[NNew] {
void* rv = realloc(arr, sizeof(T) * NNew);
return *reinterpret_cast<T(*)[NNew]>(rv);
}
int main() {
uint8_t (&arr)[100] = makeArray<uint8_t, 100>();
std::cout << sizeof(arr) << std::endl;
uint8_t (&newArr)[150] = changeArraySize<150>(arr);
std::cout << sizeof(newArr) << std::endl;
}
I2luY2x1ZGUgPGNzdGRpbnQ+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8aW9zdHJlYW0+CgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+ClQgKCZtYWtlQXJyYXkoKSlbTl0gewoJdm9pZCogcnYgPSBtYWxsb2Moc2l6ZW9mKFQpICogTik7CglyZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCgqKVtOXT4ocnYpOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTk5ldywgdHlwZW5hbWUgVCwgc2l6ZV90IE5PbGQ+ClQgKCZjaGFuZ2VBcnJheVNpemUoVCAoJmFycilbTk9sZF0pKVtOTmV3XSB7Cgl2b2lkKiBydiA9IHJlYWxsb2MoYXJyLCBzaXplb2YoVCkgKiBOTmV3KTsKCXJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUKCopW05OZXddPihydik7Cn0KCgppbnQgbWFpbigpIHsKCXVpbnQ4X3QgKCZhcnIpWzEwMF0gPSBtYWtlQXJyYXk8dWludDhfdCwgMTAwPigpOwoJc3RkOjpjb3V0IDw8IHNpemVvZihhcnIpIDw8IHN0ZDo6ZW5kbDsKCQoJdWludDhfdCAoJm5ld0FycilbMTUwXSA9IGNoYW5nZUFycmF5U2l6ZTwxNTA+KGFycik7CglzdGQ6OmNvdXQgPDwgc2l6ZW9mKG5ld0FycikgPDwgc3RkOjplbmRsOwp9