title: Why can I not modify the result of an unboxing conversion?
body: <pre><code>struct Point
  {
      public int x;
      public int y;
  }
  void Main()
  {
      Point p;
      p.x = 1;
      p.y = 1;
      Object o = p;
      ((Point) o).x = 4; // error
      ((Point) o).x = 5; // error
      ((Point) o).x = 6; // error
      p = (Point) o  // expect 6
  }
  </code></pre>
  
  <p>Why doesn't it compile to</p>
  
  <pre><code>ldloc.1 // o
  unbox Point
  ldc.i4.4
  stfld Point.x
  </code></pre>
  
  <p>Where C++ CLI allows it.</p>
  
  <p>For those who don't know, <code>unbox</code> is <a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.unbox.aspx" rel="noreferrer">not</a> required to create a copy of <a href="https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx" rel="noreferrer">value types</a>, instead it pushes a pointer to the value on to the stack.
  Only assignment would create a copy.</p>