title: Function overloading for char, signed char or unsigned char parameter type in terms of compiling template
body: <p>This is an open discussion about different ways to enable function overloading for parameters of only <code>char</code>, <code>signed char</code> or <code>unsigned char</code> type with the help of type traits in terms of C++11 template compiling.</p>
  
  <p>Though satisfactory, a compound logic of <code>std::enable_if</code> and <code>std::is_same</code> type assertion (see PS) is not smart in that all matching types, particularly <code>char</code> in spite of signedness, are used in enumeration. Therefore I'm hoping someone can specify some other clause or compound logic that might facilitate type assertions better (maybe <code>std::is_integral</code>, <code>std::is_arithmetic</code> or <code>std::is_signed</code>?).</p>
  
  <p>PS:</p>
  
  <pre><code>template &lt;typename type&gt;
  void foo(std::enable_if&lt;std::is_same&lt;type, char&gt;::value||std::is_same&lt;type, signed char&gt;::value||std::is_same&lt;type, unsigned char&gt;::value, type&gt; x)
  {
  }
  </code></pre>