C11 仕様は確かにこれを明確にしておらず、おそらく不十分です。
foo.x
以外の型の左辺値だと思いますint
が、私の正当化はかなり弱いです:
6.2.7 パラグラフ 1 は次のように述べています。
型が同じ場合、2 つの型には互換性のある型があります。
6.3 パラグラフ 2 は次のように述べています。
オペランド値を互換性のある型に変換しても、値や表現は変更されません。
foo.x
が type の左辺値である場合、他の sint
と互換性があるため、value を持つことになります(6.3p2 による)。と互換性がないことを示唆し、 type の左辺値ではないことを示唆しています。int
foo.x = 5
foo.x
5
foo.x
int
foo.x
int
foo.x
と互換性がないのは本当に意味がありませんint
。おそらく、(6.3.1 の意味での) 変換foo.x
は行われず、標準で説明されていない何らかのメカニズムを介してその値が取得されます。あるいは、「算術オペランド」の意味を誤解していて、6.3.1 が左辺値に適用されないことを誤解しているのかもしれません。
6.3.1.1 パラグラフ 1 の箇条書き 2 もあります。
- 符号付き整数型のランクは、精度の低い符号付き整数型のランクより大きくなければなりません。
foo.x
通常よりも精度が低いためint
(6.3.2.1p2 で説明されているように「指定されたオブジェクトに格納されている値に変換される」場合ではなく、左辺値として使用される場合)、異なる整数変換ランクが必要です。これは、 ではないことも示唆していint
ます。
しかし、私の解釈が有効であるか、委員会の意図と一致しているかはわかりません。
これについては、欠陥レポートを提出することをお勧めします。