<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129060>129060</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang][diagnostics] The location marking that structured binding shadows template parameter is not clear
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zwuis
</td>
</tr>
</table>
<pre>
```cpp
template <typename T> void test1() {
using arr = int[1];
auto [T] = arr{};
}
```
Current diagnostics:
```txt
<source>:3:8: error: declaration of 'T' shadows template parameter
3 | auto [T] = arr{};
| ^
<source>:1:20: note: template parameter is declared here
1 | template <typename T> void test1() {
| ^
```
Expected diagnostics:
```txt
<source>:3:9: error: declaration of 'T' shadows template parameter
3 | auto [T] = arr{};
| ^
<source>:1:20: note: template parameter is declared here
1 | template <typename T> void test1() {
| ^
```
It becomes more obvious if we add new line characters between '[' and ']':
```cpp
template <typename T> void test2() {
using arr = int[1];
auto [
T
] = arr{};
}
```
Current diagnostics:
```txt
<source>:8:8: error: declaration of 'T' shadows template parameter
8 | auto [
| ^
<source>:6:20: note: template parameter is declared here
6 | template <typename T> void test2() {
| ^
```
Expected diagnostics:
```txt
<source>:9:5: error: declaration of 'T' shadows template parameter
9 | T
| ^
<source>:6:20: note: template parameter is declared here
6 | template <typename T> void test2() {
| ^
```
Compiler Explorer: <https://godbolt.org/z/oEPdWaabK>
I believe this can be a good-first-issue.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1v4zYQ_TXjyyCGROrDOuggfwFFLz0Y6JkSJxZbShTIkZ3dX19Q9qZtkqK7m2CBFQyTEofke2_eEFQhmPNIVEO-hXy_UjP3ztefr7MJq9bpTzUUye3XTRMkDdMwWcWEIHf8aaJRDYQnkAe8OKORKXAKYgOiQii3kDSIczDjGZX3CHKPZmTItynke5C3cTWzQ8i3J8j3S4jyPs4t7xGxkzTPOGI_aXaz9zQyaqPOowtsugCyuY09h_ITx1e5C272HYE8gGwkyGYDskHy3vnY0dRZ5RUbN6J7RBDlCUSJoVfaXQM-U56UVwMx-QU2okQod_j_BO5hywP54TWkFGQjkghldEyxfb0nmnAHShp78hQXTpelvyMnC5Ry9wXOv7U9PE3UMenvFLf6seK-5PJB0iK-X903njcF_4Wxpc4NFHBwntC1F-PmgOYRr4RKaxzpitaMhF2vvOqYfMCW-Eo0Rklj9YoS1ahvb_v4_ypjX13B4tsq-EuK7txPS_tjinnzYcW8eeG3txL5psOKdzis-FqHvczItzrsHSUdyzn_EImrZ8inVyR-Xml3bpiMJY-Hp8k6T4tEIHc987RoLI4gjmenW2d57fwZxPEziKM7_KZ_V6r9NXK9HQPYkjV0IeTeBOzUiC2hwrNz-uHR-MAPJoSZ1itdS13JSq2oTsssKYosE3LV14WsUiHLTlWtVklXqbbVaZGVpHPdFptsZWqRiDwRokxlLjOxFm2i0lzKR1FkQqsKsoQGZeza2ssQ0a6WLetUVEmRrKxqyYbltiBEZ9V4BiHixcHXccJDO58DZIk1gcPfS7Bhu1wxdsuMfA_59p9GzPd46gmt626mGpT_M5443CvGwH7ueI7pbc2o4_f_dlp0w-gYO0vKr2Zv6xdpMNzP7bpzA4hjxHdvHibv_qCOQRwXvgHE8U75Uou_AgAA__91HaSI">