title: Copy elision for pass-by-value arguments
body: <p>Given</p>
  
  <pre><code>struct Range{
      Range(double from, double to) : from(from), to(to) {}
      double from;
      double to;
  };
  
  struct Box{
      Box(Range x, Range y) : x(x), y(y) {}
      Range x;
      Range y;
  };
  </code></pre>
  
  <p>suppose we run <code>Box box(Range(0.0,1.0),Range(0.0,2.0))</code>.</p>
  
  <p>Could a modern compiler with optimizations enabled avoid copying <code>Range</code> objects altogether during this construction? (i.e. construct the <code>Range</code> objects inside <code>box</code> to begin with?)</p>