title: Template argument type deduction by conversion operator
body: <p>I see example from the C++ 11 Standard (n3337, 14.8.2.3/7)</p>
  
  <pre><code>struct A {
  template &lt;class T&gt; operator T***();
  };
  A a;
  const int * const * const * p1 = a; // T is deduced as int, not const int
  </code></pre>
  
  <p>and try to reproduce it by different compilers. I changed the example a little by adding a declaration with type T in a conversion function</p>
  
  <pre><code>struct A {
      template &lt;class T&gt; operator T***()
      {
          T t;  //if T==const int, then it is error (uninitialized const)
          return nullptr;
      }
  };
  A a;
  const int * const * const * p1 = a;
  
  int main(){}
  </code></pre>
  
  <p>All the compilers (VS2014, gcc 5.1.0 and clang 3.5.1) give an error in the declaration of "t", which means T is deduced as const int. Why is that? Is it some extension?</p>