次の例のソースコードを考えてみましょう。
struct bar; struct foo { struct foo *ffp; struct bar *fbp; } *fp; struct bar { struct bar *bbp; long b2; } *bp;
それぞれの別名レベルに基づいて、コンパイラは次のように仮定します。
この例が -xalias_level=weak オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。
この例が -xalias_level=layout オプションでコンパイルされる場合、fp->ffp および bp->bbp だけが相互に別名設定できます。
この例が -xalias_level=strict オプションでコンパイルされる場合、フィールドは別名設定できません。タグが削除されたあとも、2 つの構造体の型が異なるからです。
この例が -xalias_level=std オプションでコンパイルされる場合、フィールドは別名設定できません。2 つの型とタグが同じではないからです。