n <code>foo(1.0, 1.0)</code> resolves
to <code>foo(real, real)</code>, and thus the expression <code>foo(1.0, 1.0)</code>
itself is assigned a type of <code>real</code>.</p>
<p>Because integers may be promoted to real values, the expression
<code>foo(1, 1)</code> could potentially match either <code>foo(real, real)</code>
or <code>foo(int, int)</code>. The former requires two type promotions and
the latter requires none, so <code>foo(1, 1)</code> is resolved to function
<code>foo(int, int)</code> and is thu