#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;
}