struct A {
  int i;
  char c[];
};

int main(int argc, char *argv[])
{
  char mem1[sizeof(A) + 2 * sizeof(char)];
  char mem2[sizeof(A) + 2 * sizeof(char)];

  A &a1 = *reinterpret_cast<A *>(mem1);
  A &a2 = *reinterpret_cast<A *>(mem2);

  a1.i = 2;
  a2.i = 0;
  a1.c[0] = 'a';
  a2.c[0] = 'c';
  a1.c[1] = 'b';
  a2.c[1] = 'd';

  a2 = a1;

  return !((a2.i == 2) && (a2.c[0] == 'c') && (a2.c[1] == 'd'));
}
