title: Is return value always a temporary?
body: <p><a href="http://msdn.microsoft.com/en-us/library/a8kfxa78%28v=vs.80%29.aspx" rel="nofollow">This</a> page says a strange thing :- </p>
  
  <p><em>The temporaries are created only if your program does not copy the return value to an object and example given is</em></p>
  
  <pre><code>UDT Func1(); // Declare a function that returns a user-defined type.
              ...
  
  Func1();        //  Call Func1, but discard return value.
                 //  A temporary object is created to store the return
                //   value
  </code></pre>
  
  <p>but if i have done :-</p>
  
  <pre><code>UDT obj=Fuct1;
  </code></pre>
  
  <p>It appears to me  that it will also create a temporary as follow:-</p>
  
  <p><em><code>Func()</code> constructs a local object. Next, this local object is copy-constructed on the caller's stack, making a <code>temporary object</code> that is used as the argument of obj's copy-constructor.</em></p>
  
  <p>Am I wrong?<br>
  Is this has something to do with copy elision?  </p>