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

    <tr>
        <th>Summary</th>
        <td>
            Clang rejects valid program when delete move ctor is used in decltype
        </td>
    </tr>

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

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

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

<pre>
    The following valid program is rejected by clang, gcc and msvc:
```
struct NoMove {
    NoMove(NoMove&&) = delete;
};

NoMove&& DeclVal();
void F1(...);
void     F2(auto);

using Type1 = decltype(F1(DeclVal()));   // #1: this compiles 
using Type2 = decltype(F2(DeclVal()));   // #2: this doesn't compile when it should
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMks1upDoQhZ-m2JSCTLn5W3hB0mJ37yqavbHd4JHBCJuO-u1HJiQzyWwGlYRVFOf4lD4Zgh0XYwSUz1BeM7nHyW9ik4uUi_drNnj9EK-TwZt3zr_ZZcS7dFbjuvlxkzPagJv5aVQ0GocHKieXEegFR6VQLhrncFfAO2AdVOws1oW47Sri__4_fzcI9TOwDhHPBlDzcaiOahH4FbVxJhrgaRjq63lg3Z-zeDXK_ZAOqAFq30fu3mrsC6Amz_Ov3fT0BNTIPfrPT8C6PaSor4_VFKe3cvGxpqsdSl9t3os_IyJQD9QjEC-AdxgnG1D5ebXOBPwiTH8J078J06ew9iYsQHX8sMC3ySxoI4bJ705_23qmBdctb2VmRFE3_NJQW1bZJAZTNZqKm77dSk21ajkvh6aoTUWMeFVlVhCjitWsYbwsyyovFd34ULOCyvaipIYLM7O0LnfuPud-GzMbwm4EsabgdebkYFw4KCM6GaEE3CbSD0_DPga4MGdDDL8loo3OiJc0fkIWvtF3xH3nAueEkop-S0zuwWi0y-d6s31zYopxDQnGY5WjjdM-5MrPQH3yPF9P6-aTF1B_ZAhA_RnjLuhXAAAA___d__Uy">