title: How to resolve the return type of a forwarding reference?
body: <p>There is an existing <code>expected&lt;T,E&gt;</code> class which provides these <code>typedefs</code> and <code>operators</code>:</p>
  <pre><code>value_type = T
  operator *(): expected&lt;T,E&gt;&amp; -&gt; value_type&amp;
                const expected&lt;T,E&gt;&amp; -&gt; const value_type&amp;
                expected&lt;T,E&gt;&amp;&amp; -&gt; value_type&amp;&amp;
                const expected&lt;T,E&gt;&amp;&amp; -&gt; const value_type&amp;&amp;
  </code></pre>
  <p>Now I'm writing a function like this:</p>
  <pre><code>template &lt;typename E&gt; 
  /*type*/ Unwrap(E&amp;&amp; e)
  {
      return e.has_value() ? /*what*/
          : throw e.error();
  }
  </code></pre>
  <p>what should I put in the comment block?<br />
  I've tried <code>auto&amp;&amp;</code> and <code>*e</code>, it received an <code>excepted&amp;&amp;</code> but returned a <code>value_type&amp;</code>.<br />
  I've also tried <code>std::forward</code>, but it even couldn't be compiled.</p>
  <p>how should I do?</p>