title: What is the purpose of std::common_type?
body: <p>I started looking at <code>std::common_type</code> and am not exactly sure about its purpose and its functionality.
  A few things still strike me as odd:</p>
  
  <ul>
  <li>Order of arguments is important: <code>common_type&lt;Foo, Bar, Baz&gt;</code> might be different from <code>common_type&lt;Baz, Foo, Bar&gt;</code>. Either might compile, the other might not. While this is clear from the way <code>common_type</code> is defined, it feels strange and unintuitive. Is this for lack of a universal solution or intended? </li>
  <li>Instantiation can result in a compiler error instead of something I can handle. How to check if <code>common_type</code> will actually compile? <code>is_convertible</code> is not enough as <code>common_type</code> might be specialized?</li>
  <li><p>There is still no way to figure out the common type in a situation like this:</p>
  
  <pre><code>struct Baz;
  struct Bar { int m; };
  struct Foo { int m; }; 
  struct Baz { Baz(const Bar&amp;); Baz(const Foo&amp;); };
  </code></pre>
  
  <p>The recommended solution would be to specialize <code>common_type</code> which is tedious. Is there a better solution?</p></li>
  </ul>
  
  <p>For reference see §20.9.7.6 Table 57 in N3242.</p>