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