<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/102724>102724</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang rejects valid program involving conversion function with lvalue ref return type
</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 and msvc but accepted by gcc. [Demo](https://godbolt.org/z/WxzTnbvMa)
```
#include <utility>
#include <type_traits>
struct foo {
int asdf = 0;
template <class T, class O>
using conversion_type = std::conditional_t<
std::is_lvalue_reference_v<O>,
T&,
T
>;
template <class Self>
operator conversion_type<int, Self>(this Self&& self) {
static_assert(std::is_same_v<int&, conversion_type<int, Self>>);
return std::forward<Self>(self).asdf;
}
};
int main() {
foo f;
int& fdsa = f; //accepted by only gcc
}
```
Clang says:
```
<source>:23:11: error: non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'foo'
23 | int& fdsa = f; //accepted by only gcc
| ^
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVM-O-jYQfprJZbQo2ISQQw5s-HGreihSj8ixHXDl2Mh2smWfvrKTJbBatYdGK6_N_P1mvhnmvboYKWso3qE4ZGwIV-tqxwxjxtpb1lpxr09XiZ3V2n4oc8GRaSXw5uzFsR6VRyf_kjxIge0duWbmgswI7P3IsR0CMs7lbRZfOF8hFO8H2VsoDkB21xBuHugeyBHI8WJFa3VYWXcBcvwEcvzz78-TacffGJAK8gPk-_nc5vPf9CRUGa4HIRFoMwSlVbgD_fWTNNxv8hwcU8EvGun0wQ08YGctQvk-_YaIqExA5kWHQA-YA33HZ6uoEWR_0ywk_1wz7_EEpMHp-vsjTFQdfKwit2aUzitrzjGf5NkHEStB99waoYKyhulzANosxvF7qCl_1iPTgzw72UknDZfnEWiT4pEvqxOQ7fKav9PyjMr0CSz-G6o_pO4WNPYmHQvWfUcDtFEmxAJ86ZNduKrZPKazRZ-u1VOhfWBB8TPzXroAZPeM07N-wpb8blNt_ytmDFst0JwMgzNL9TrrPpgTQJslyTmpVWz2S1GgPMwtLw8PwXRGcvRMGSC7VzyRRq9ecMoeO-FZ6ngUJ_eJ_c-TYo1O47JE_Yn2TRo3z-5phH4cDNp4OzguU0X2hALdr9dA9yidsy5ejDVv3BofcGITPtiEweLETlKm1EvkzBgbsFVGRCnDycR2OBgnI1nEw6SzFkj5gE8oQtng_yrEZB3dQPHria0P1JmoqahoxTJZr0tCybaqiiK71qzgkpNtwdZdtVmLXDBBBN0VXV50VVmQTNUkJ5t8t87zbV4UxYp1u67d5B2lXBREFrDJZc-UXmk99nFFZcr7QdbrnJRkk2nWSu3TJiUk7UEgJC5VV0eDt3a4eNjkWvngFxdBBS3rqY_TIvXfN6wZrR5fdwZ2g-FxQeCHCtenvn2xPLYgG5yuv-1XFa5Du-K2B3KMOcz_3m7OxthAjgmTB3KcYY01-ScAAP__817Syg">