title: How to check if two types are same at compiletime(bonus points if it works with Boost strong typedef)
body: <p>I was wondering if it is possible to check if 2 types are same at compile time.
  What I came up with is(idk if it works because it feels hackish and IDK standard that good so IDK what to look for when testing).</p>
  
  <pre><code>#include &lt;boost/strong_typedef.hpp&gt;
  BOOST_STRONG_TYPEDEF(double, cm);
  BOOST_STRONG_TYPEDEF(double, inch);
  template&lt;typename T, typename U&gt;
  static constexpr void __help() 
  {
  }
  template&lt;typename T, typename U&gt;
  class AreSameType
  {
      public:
      constexpr operator bool()
      {
       return &amp;__help&lt;T,U&gt; == &amp;__help&lt;U,T&gt;;
      };
  };
  </code></pre>
  
  <p>usage :</p>
  
  <pre><code>int main()
  {
          static_assert(AreSameType&lt;double,float&gt;()== false, "oh noes1");
          static_assert(AreSameType&lt;double,double&gt;()== true, "oh noes2");
          static_assert(AreSameType&lt;int*,double*&gt;()== false, "oh noes3");
          static_assert(AreSameType&lt;double*,double&gt;()== false, "oh noes4");
          static_assert(AreSameType&lt;const double,double&gt;()== false, "oh noes5");
          static_assert(AreSameType&lt;inch,cm&gt;()== true, "oh expected"); //fires
  }
  </code></pre>
  
  <p>So </p>
  
  <p>1) is there a better way to it?<br>
  2) is this address of a function hack guaranteed to work by standard(I would bet not :))?</p>