title: Represent sum of random access iterators as a random access iterator
body: <p>Random access iterators are constrained to the difference between two iterators, or to adding or subtracting an integer from an iterator.
  Rules do not allow addition of two iterators.</p>
  <p>I stumbled on a situation where adding two iterators could actually be useful:</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;vector&gt;
  
  using std::vector;
  using std::cout;            using std::endl;
  
  template&lt;typename RndIterator&gt; 
  RndIterator rndIteratorsSum(RndIterator left, RndIterator right)
  {
      //return (left + right) / 2;        // forbidden
      return left + (right - left) / 2;   // workaround
  }
  </code></pre>
  <p>A sum of pointers has been reduced to a sum of a pointer + (<code>std::ptrdiff_t</code> / <code>int</code> = <code>int</code>) so it is legal now.
  The test function could be:</p>
  <pre><code>int main()
  {
  // outputs median of input
      vector&lt;int&gt; test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
      vector&lt;int&gt;::iterator iter = rndIteratorsSum(test.begin(), test.end());
      
      cout &lt;&lt; &quot;median of input vector: &quot; &lt;&lt; *iter &lt;&lt; endl;
  
  return 0;
  }
  </code></pre>
  <p>Is using the above trick allowed or discouraged? If discouraged, why?</p>