ECMA-334 (C# 言語仕様) で次の動作が定義されている場所を見つけようとしています。ソースプログラムは以下の通りです。
static void Main(string[] args)
{
TestStruct a = new TestStruct();
a.byteValue = 1;
TestStruct b = new TestStruct();
b.byteValue = 2;
Console.WriteLine(string.Format("Result of {0}=={1} is {2}.",
a.boolValue, b.boolValue, a.boolValue == b.boolValue));
Console.WriteLine(string.Format("Result of {0}!={1} is {2}.",
a.boolValue, b.boolValue, a.boolValue != b.boolValue));
Console.WriteLine(string.Format("Result of {0}^{1} is {2}.",
a.boolValue, b.boolValue, a.boolValue ^ b.boolValue));
}
[StructLayout(LayoutKind.Explicit, Pack = 1)]
struct TestStruct
{
[FieldOffset(0)]
public bool boolValue;
[FieldOffset(0)]
public byte byteValue;
}
実行結果は以下。
Result of True==True is False.
Result of True!=True is True.
Result of True^True is True.
これはセクション 14.9.4 と §14.10.3 の両方に違反しているため、これらのケースをカバーする例外が別の場所に記載されていると想定しています。これは、AND、OR、NAND、または NOR 演算を使用するコードには影響しませんが、XOR および/または論理二条件演算を使用するコードに影響する可能性があることに注意してください。