title: std::is_assignable and const pointer object
body: <p>I have a small problem when trying to deduce things with <code>std::is_assignable</code></p>
  <h1>My code:</h1>
  <pre><code>#include &lt;string&gt;
  #include &lt;type_traits&gt;
  
  class Object{};
  
  enum my_conv {
    string, const_object, object
  };
  
  template&lt;typename T, typename V = void&gt;
  struct deducer;
  
  template&lt;typename T&gt;
  struct deducer&lt;T, typename std::enable_if&lt; std::is_constructible&lt;std::string, T&gt;::value &gt;::type &gt; {
    static const my_conv value = my_conv::string;
  }; // (1) test for string                                                                                              
  
  template&lt;typename T&gt;
  struct deducer&lt;T, typename std::enable_if&lt; std::is_assignable&lt;Object*&amp;, T&gt;::value &gt;::type &gt; {
    static const my_conv value = my_conv::object;
  }; // (2) test for Object derived                                                                                      
  
  template&lt;typename T&gt;
  struct deducer&lt;const T, typename std::enable_if&lt; std::is_assignable&lt;Object*&amp;, T&gt;::value &gt;::type &gt; {
    static const my_conv value = my_conv::const_object;
  }; // (3) should test for const Object derived                                                                         
  
  class Test : public Object {
  public:
    Test() = default;
  };
  
  int main() {
    std::string   str;
    Test*         t = new Test;
    const Test*   tconst = static_cast&lt;const Test*&gt;(t);
  
    deducer&lt;decltype(t)&gt;::value;// deduce as (1)                                                                         
    deducer&lt;decltype(str)&gt;::value;//deduce as (2)                                                                        
    deducer&lt;decltype(tconst)&gt;::value;//fail to deduce as (3)... why?                                                     
  }
  </code></pre>
  <p>And I really don't understand why the compiler fail to instantiate the third deducer....</p>
  <h1>Edit:</h1>
  <p>When testing I have seen that writing that:</p>
  <pre><code>struct deducer&lt;const T*, typename std::enable_if&lt; std::is_assignable&lt;Object*&amp;, T*&gt;::value &gt;::type &gt;
  </code></pre>
  <p>make it work, but I think I still need some explanation... because I still don't understand what is wrong in the first time....</p>