<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">