title: Why is the `Sized` bound necessary in this trait?
body: <p>I have a trait with two associated functions:</p>
  
  <pre><code>trait WithConstructor: Sized {
      fn new_with_param(param: usize) -&gt; Self;
  
      fn new() -&gt; Self {
          Self::new_with_param(0)
      }
  }
  </code></pre>
  
  <p>Why does the default implementation of the second method (<code>new()</code>) force me to put the <code>Sized</code> bound on the type? I think it's because of the stack pointer manipulation, but I'm not sure.</p>
  
  <p>If the compiler needs to know the size to allocate memory on the stack,
  why does the following example not require <code>Sized</code> for <code>T</code>?  </p>
  
  <pre><code>struct SimpleStruct&lt;T&gt; {
      field: T,
  }
  
  fn main() {
      let s = SimpleStruct { field: 0u32 };
  }
  </code></pre>