title: the rules in function overloading
body: <p>Look about this code (for example) : </p>
  
  <pre><code>#include &lt;iostream&gt;
  void print(unsigned int value);
  void print(float value);
  
  int main() {
      print('a');
      print(0);
      print(3.14159);
      return 0;
  }
  </code></pre>
  
  <p>I get the next error:  </p>
  
  <blockquote>
    <p>'print(char)' is ambiguous  </p>
  </blockquote>
  
  <p>What is really the problem here? I understood that more than one function appropiate to any call from the main (to print function). But what is really the rules in <code>function overloading</code> (How can I know what appropiate to what, between which types exists casts and etc.)  </p>
  
  <p>How can I know that more than one function appropiate to the call?  (more example: that not obvious how to understand that the two functions appropiate to the call)  </p>
  
  <pre><code>#include &lt;iostream&gt;
  
  void print(unsigned int value);
  void print(int value);
  
  int main() {
      print(2.5);
  }
  </code></pre>