[int, int, int] f();
[int, [int, int], int] g();

int main() {
  ([int, double])f();           // (1)
  ([int, [int], int])g();         // (2)
  printf("%d %d\n", ([void, [int, int]])g());      // (3) -- should work and doesn't -- tries to construct void object, but should ignore that component in terms of the type of the tuple
  // ([int, int, int, int])g();    // (4) -- should not work and doesn't
  // ([int, [int, int, int]])g();  // (5) -- should not work and doesn't
}
