#include <iostream>

struct NonTrivial
{
  int i = 5;
  ~NonTrivial() { std::cout << "Destructor" << std::endl; }
};

struct Trivial
{
  int i = 5;
};

int main()
{
  NonTrivial *p = new NonTrivial[29];
  std::cout << *((size_t *) p - 1) << std::endl;
  std::cout << *((size_t *) p - 2) << std::endl;
  std::cout << *((size_t *) p - 3) << std::endl << std::endl;
  
  Trivial *t = new Trivial[29];
  std::cout << *((size_t *) t - 1) << std::endl;
  std::cout << *((size_t *) t - 2) << std::endl;
  std::cout << *((size_t *) t - 3) << std::endl << std::endl;
  
  int *q = new int[29];
  std::cout << *((size_t *) q - 1) << std::endl;
  std::cout << *((size_t *) q - 2) << std::endl;
  std::cout << *((size_t *) q - 3) << std::endl << std::endl;
}
