<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60377>60377</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang][concepts] bug or feature? requires clause differs because of a pair of bracket
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
FeignClaims
</td>
</tr>
</table>
<pre>
Like the example below, in order to help clang-format format requires clause correctly, I used to add a pair of bracket. Now I changed my style. When I tried to change my code, the unexpected error happened.
```cpp
#include <concepts>
template <typename T>
requires std::integral<T>
struct Widget;
template <typename T>
requires(std::integral<T>) // error: Requires clause differs in template redeclaration
struct Widget {
T value;
};
[[nodiscard]] auto main() -> int {
Widget<int> widget{1};
return widget.value;
}
```
I tested this with different compilers. It turns out:
- [error - x86_64 clang (trunk)](https://godbolt.org/z/vGYxjaWqe)
- [pass - x86_64 gcc (trunk)](https://godbolt.org/z/7bWjTvxGj)
- [error - x64 msvc v19.latest](https://godbolt.org/z/bWo3rj9x3)
Is this a bug or expected behaviour in standard?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVF1v6zYM_TXKCxHDkWrHfvBDk1xfFBj2MFyg2NMgS4ytVpZ8JTpN9-sHJWnSjw3YBgQxbJGHh4dHlDGa3iE2rNiwYreQMw0-NC2a3m2tNGNcdF6_Nr-YZwQaEPAox8kidGj9C-NbMA580BiAPAxoJ1BWun6592GUBJdHwJ-zCRjT4RwRlA8BFdnXhPAAc0Sd8qXWIGGSJoDfQxekekbK4Ff_Ag-gBul61DC-QqRXixk8DujgASiYc_o5IgUorzFBJ8azw-OEilADhuADDHKa0KHOWL5j-f3lv8zPPzVNly9cGKfsrBGY2CrvFE4Umfj2Po1wnKykUwi9TujkiPDjGgS3ziNpJu6ZuDeOsA_SMrG9BUYKsyJ4NLpHYmLzv2owXv1jFV4DMN4y3p5VYOIefvs0FW32ewwxjfRaM6BGZWWQZLz7G67A1ps3Hj_gIO2MN_rr3adWTi7bOK9NVDJoVuxYsQM5k4dRGsd4lYgumfgGxn3AflNmaxyl45fz-3qzel8laUFzcJfj7Cufj8N-z-0BCGNyCQ0mwouh4SIIOgLlx8lYDDGDB4JUIoKfKWn9DmIJrNicTbaEY1X-Ud6drwMwXlGY3TPjdWqaVwPRFFP6aSa91523lPnQM97-yXh7-P778Uk-_sSUcQOfZIw37F6p_4687h6ffhyO358-Il9pl3cwxoOCw6rOkgUi_Tvc7tGL8FQfxRX3oms8Kyqhm3vwAa7XscNBHoyfQ3JcJOl08oRoF7oRuha1XGCzKtdFXlQVLxdDsyp0USByrqu1rsS-wKqqZd0JVdbFKt8vTMNzLvKVyPMyX-dlVqLQai-qKq-LOyWR3eU4SmMzaw9jIr8wMc7YlLlYrxdWdmjj2y4MTQpadnMf2V1uTaR4SyND9rQ1t2m-JyNvrjui2L31ukdJc0Am2i878O22dahO737_dfct5mCbT8IbGuYuU35kvE10Lo_lFPwTKmK8PbUUGW9PXf0VAAD__2r01g8">