{
   T nrv( lhs );
   nrv += rhs;
   return nrv;
}
</pre>
    Given this implementation, the compiler is allowed to remove the
    intermediate object. Sadly, not all compiler implement the NRVO, some
    even implement it in an incorrect way which makes it useless here.
    Without the NRVO, the NRVO-friendly code is no worse than the original
    code showed above, but there is another possible implementation, which
    has some very special properties:
<pre>
T operator+( T lhs, const T&amp; rhs )
{
   re