title: Compiler not enforcing return contract
body: <p>for the following code </p>
  
  <pre><code>int foo(int a = 10, int b = 20);
  
  int foo(int a, int b)
  {
      std::cout &lt;&lt; a + b;
  }
  
  int main()
  {
      foo();
  }
  </code></pre>
  
  <p>I don't get a compiler error. Instead, I get this </p>
  
  <blockquote>
    <p>Error(s):
    Invalid memory reference (SIGSEGV)
    3030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303</p>
  </blockquote>
  
  <p>Any idea why the compiler simply does not error out saying you forget to return an int as promised in the function prototype? </p>
  
  <p>This is on clang</p>