<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/106865>106865</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] NTTP pointer to explicit this member function 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          vasama
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/Ez55zEedh

```
C:\Users\vasama\sandbox λ cat test.cpp
template<auto>
struct nontype_t {};

template<auto Value>
inline constexpr nontype_t<Value> nontype{};

template<auto F>
void f(nontype_t<F>);

struct s
{
        void f(this s);
};

void g()
{
        f(nontype<&s::f>);
}
C:\Users\vasama\sandbox λ clang --version
clang version 18.1.8
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
C:\Users\vasama\sandbox λ clang -std=c++23 test.cpp
test.cpp:5:28: error: must explicitly qualify name of member function when taking its address
    5 | inline constexpr nontype_t<Value> nontype{};
      |                            ^~~~~
      |                            s::
test.cpp:17:4: note: in instantiation of variable template specialization 'nontype' requested here
   17 |         f(nontype<&s::f>);
      |           ^
test.cpp:5:28: error: must explicitly qualify name of member function when taking its address
    5 | inline constexpr nontype_t<Value> nontype{};
      |                            ^~~~~
      |                            s::
test.cpp:17:4: note: in instantiation of variable template specialization 'nontype<&s::f>' requested here
   17 |         f(nontype<&s::f>);
      |           ^
test.cpp:17:2: error: no matching function for call to 'f'
   17 |         f(nontype<&s::f>);
      |         ^
test.cpp:8:6: note: candidate template ignored: substitution failure [with F = &s::f]: must explicitly qualify name of member function when taking its address
    8 | void f(nontype_t<F>);
      |      ^
    9 |
   10 | struct s
   11 | {
   12 |         void f(this s);
   13 | };
   14 |
   15 | void g()
   16 | {
   17 |         f(nontype<&s::f>);
      |         ~
3 errors generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk2PozgT_jWVSykR2AGSQw75lF5p3tUceuc6MlAB7xqbsU3649C_fWWg00m6NerZndVcFkVBri-eqqesKuGcrDTRCpINJLuJ6Hxt7OoknGjEJDfl46r2vnXA18AOwA6VKXOj_MzYCtjhCdhh_5QkT3sqa4h2EK3H_zQaf_1xG_yT7e-OrINkO4SHZOuELnPzgLDdw2aDhfDoyflZ0baDo6emVcIT8K3ovAG-H-TO267wqI32jy199QjZBrId8M0lihtv_CJUR-cYUiupCQujnaeH1r5GA759MX0Rfij-4Rz7ZGSJR2CLy5i9mi1vgoypuFGWjUocn3MkX0uH7sr_DaDeuAK2CGbvx7sABXwLLO255evjLbhs92PcKaErnE5PZJ00evAdhKMI48Usni0GzZ2wFXnga3xYpF_T-bQtpvdSl-beTRt3Kkar2pIosTElqWDbGicfBtX_tPNCKSp30gbVCPOzNZUVDR6kogD306cv_4dkm0v9d7JxvgS-K4BtgG0Yf9Oc44mvE-Brtgg4yFrTA2o655EeWiUL6dUjfuuEksdH1KIhNEdsqMnJ4rHThQ_Vua9Joxd_Sl2h9A5FWVpy7pW9BCHb4j_p2qEDQpTvPJDsn5-fn3_AY-ygN0WJM-DreaiFNuGSrFFqlIE37aXokzZHPAkrRa4IX24TupYKKZR8GmyAZS_psAwtfevIeSqxJktnlHF2hfKjXf5efpDs_-P31_D7lqpfRXifG7siXBtshC_qQOCZ1aOxWAil0JuQyBFY9vMhvgcwNGN6WftC6FKWob7nQstKG0tl0Loud176bgAtpOosISSbe-lrPCDwHV4iSnb_Sosv-rQ-NBxvqnAuQTgsg_y1zFFvdj1Hgzzu5ZcTMGZXdf3ObA3GfPS_umDx_PrjyWtKV4M36NK3AH5WS4z3lw_t6bAiTVZ4Kmc3C9ikXPFyyZdiQqs4Y0nMllGaTuoVy4ukFMt5nokimwsSxzzjxTxnyyJNiYmJXLGIzaMFj-MFj6P5TCwFW2YRK1m65KJYwjyiRkg1U-rUhI1wIp3raBVH6SJNJkrkpFy_WTLWD1RgLCyZdhUcpnlXOZhHSjrvXkN46VW_jg4eyQ5_u7v7jK2R2pMN1-ylIbFn7bYHJ51Vtzur9HWXzwrTADuED42vaWvNH1R4YIceuAN2GLGfVuyvAAAA__9ACSok">