title: static_assert unexpected behavior
body: <p>I have an overloaded <code>operator&amp;</code> for my class where I do a static assert if the parameter is a pointer.</p>
  <pre><code>class test {
  public:
  
    template&lt;typename T&gt;
    friend inline test&amp; operator&amp;(test&amp; so, T const&amp; t) {
      std::cout &lt;&lt; &quot;is_pointer : &quot; &lt;&lt; std::is_pointer&lt;T&gt;::value &lt;&lt; std::endl;
      static_assert(std::is_pointer&lt;T&gt;::value, &quot;no operator overloaded for pointers.&quot;);
      
      // some stuff
    }
  };
  </code></pre>
  <p>If I use this operator I always get the assertion even if the type is definitively not a pointer. <code>std::cout &lt;&lt; &quot;is_pointer : &quot; &lt;&lt; std::is_pointer&lt;T&gt;::value &lt;&lt; std::endl;</code> is printing a zero...</p>
  <pre><code>int main() {
    test t;
    t &amp; 123;
    return 0;
  }
  </code></pre>
  <p><a href="http://ideone.com/yqHSZ4" rel="nofollow noreferrer">Example</a>.</p>