 <p>The signature of <code>foo1</code> is <code>void(int)</code>, not <code>void()</code>. This is why it isn't convertible to <code>void(*)()</code>.</p> <p>You are confusing default arguments with overloading.</p>