title: How to explicitly call a conversion function whose conversion-type-id contains a placeholder specifier
body: <pre class="lang-cpp prettyprint-override"><code>struct A{
    operator auto(){
       return 0;
    }
  };
  int main(){
     A a;
     a.operator auto(); // #1
     a.operator int(); //  #2
  }
  </code></pre>
  <p><a href="https://godbolt.org/z/3jdaK9" rel="noreferrer">GCC</a> accepts that #2 is the right way to call the conversion function explicitly while <a href="https://godbolt.org/z/Ehf5vG" rel="noreferrer">Clang</a> accepts #1.</p>
  <p>It seems that <code>#1</code> is ill-formed due to the following rule:<br />
  <a href="https://timsong-cpp.github.io/cppwp/n4659/dcl.spec.auto#6" rel="noreferrer">dcl.spec.auto#6</a></p>
  <blockquote>
  <p>A program that uses auto or decltype(auto) in a context not explicitly allowed in this section is ill-formed.</p>
  </blockquote>
  <p>This usage <code>a.operator auto()</code> is not explicitly allowed in section [dcl.spec.auto], hence it should be ill-formed. However, for the second usage, which is accepted by GCC, the standard does not say that the <code>conversion-function-id</code> where the <code>conversion-type-id</code> is <strong>replaced by the deduced type</strong> denotes the name of the conversion function. In other words, the declared <code>conversion-function-id</code> in the declaration is <code>operator auto</code> rather than <code>operator int</code>. The former has the same token as the declarator-id of the declaration. According to the grammar, the unqualified-id <code>operator auto</code> should be the name of that conversion function. So, how to explicitly call this conversion function? Is it underspecified in the standard about which is the name of the conversion function when it contains a placeholder specifier?</p>