title: Does return statement copy values
body: <p>I am wondering about this because of scope issues. For example, consider the code</p>
  
  <pre><code>typedef struct {
      int x1;/*top*/
      int x2;/*bottom*/
      int id;
  } subline_t;
  
  
  
  subline_t subline(int x1, int x2, int id) {
      subline_t t = { x1, x2, id };
      return t;
  }
  
  int main(){
      subline_t line = subline(0,0,0); //is line garbage or isn't it? the reference
      //to subline_t t goes out of scope, so the only way this wouldn't be garbage
      //is if return copies
  }
  </code></pre>
  
  <p>So my question is, will the return statement always copy? In this case it seems to work, so I am led to believe that return does copy. If it does copy, will it copy in every case?</p>