Разъяснение на примере союзов в стандарте C11

Следующий пример приведен в стандарте C11, 6.5.2.3

Следующее не является допустимым фрагментом (потому что тип объединения не виден внутри функции f):

struct t1 { int m; };
struct t2 { int m; };
int f(struct t1 *p1, struct t2 *p2)
{
   if (p1->m < 0)
   p2->m = -p2->m;
   return p1->m;
}
int g()
{
   union {
      struct t1 s1;
      struct t2 s2;
   } u;
   /* ... */
   return f(&u.s1, &u.s2);
}

Почему важно, чтобы тип объединения был виден функции f?

Прочитав соответствующий раздел пару раз, я не увидел ничего в содержании раздела, запрещающего это.

Ответы на вопрос(3)

Ваш ответ на вопрос