title: Why does not C# support operator overloading with pass by reference?
body: <p>Is this a CLR restriction or a language design decision? I tried to do it in C++/CLI, of course where it works because the need to support native c++:</p>
  
  <pre><code>public ref class Test
      {
          public:
          static Test^ operator &amp;( Test^ msg, int&amp; i )
          {
              i = i + 1;
  
              return nullptr;
          } 
      };
  </code></pre>
  
  <p>and then looked at the compiler omitted output:</p>
  
  <pre><code>public: static Test __gc* op_BitwiseAnd(Test __gc* msg, Int32 __gc** modopt(IsImplicitlyDereferenced __gc*) i)
  {
      i[0] += 1;
      return 0;
  }
  </code></pre>
  
  <p>I went further and tried to call this operator from C# project - and of course I needed to go [unsafe] to do it( I needed pointer ):</p>
  
  <pre><code>Test t = new Test();
  int i = 0;
  
  unsafe
  {
      t = t &amp; &amp;i;
  } 
  </code></pre>
  
  <p>Obviously not so hard to implement for the CLR? I really miss pass by reference in operators overloading and would like to at least in light myself in why is this missing? </p>
  
  <p>Why can't C# hide the ugliness behind the unsafe and pointers when we need to deal with reference variables in our operator overloads? Even if I chose to go with this ugly workaround it wouldn't work in Silverlight, where unsafe operations is not allowed...</p>