title: How do I avoid implicit conversions on non-constructing functions?
body: <p>How do I avoid implicit casting on non-constructing functions?<br>
  I have a function that takes an integer as a parameter,<br>
  but that function will also take characters, bools, and longs.<br>
  I believe it does this by implicitly casting them.<br>
  How can I avoid this so that the function only accepts parameters of a matching type, and will refuse to compile otherwise?<br>
  There is a keyword "explicit" but it does not work on non-constructing functions. :\<br>
  what do I do?</p>
  
  <p>The following program compiles, although I'd like it not to:</p>
  
  <pre><code>#include &lt;cstdlib&gt;
  
  //the function signature requires an int
  void function(int i);
  
  int main(){
  
      int i{5};
      function(i); //&lt;- this is acceptable
  
      char c{'a'};
      function(c); //&lt;- I would NOT like this to compile
  
      return EXIT_SUCCESS;
  }
  
  void function(int i){return;}
  </code></pre>
  
  <p>*please be sure to point out any misuse of terminology and assumptions </p>