<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/155647>155647</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang or MSVC Compilation Fails, but GCC Succeeds
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          lgztx96
      </td>
    </tr>
</table>

<pre>
    ~~~cpp
#include <variant>
#include <vector>

struct A { int a; };
struct B { int b; };

template <class T>
concept ordered = requires(const T & t) {
    { t <=> t };
};

template <class T>
struct tuple_elem
{
    static inline T value{};
    auto operator<=>(const tuple_elem&) const = default;

 constexpr auto operator<=>(const tuple_elem& other) const
 requires(std::is_reference_v<T>&& ordered<T>)
    {
        return value <=> other.value;
    }
};

template <class T>
struct tuple : tuple_elem<T> {
    auto operator<=>(const tuple&) const = default;
};

int main()
{
    tuple<const std::vector<std::variant<A, B>>&> left;
    auto& v = left.value;
    (void)v;

    return 0;
}
~~~
For the following example, when using Clang or MSVC with the C++20 standard, compilation fails because P2944R3 is not implemented. However, GCC 10 compiles it successfully, It appears that it does not attempt to instantiate the comparison function.
Is this expected behavior?
https://godbolt.org/z/hzrEfY83z
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyclE-PqzYUxT-Ns7l6EdgJSRYsCBnat6hU9Y0qdTUy5hJcOTa1L8y8WeSzV4b8m75Fp80myNc-9_h3LsgQ9NEi5my9Z-vDQg7UOZ-b4zu97bJF7Zrv-fl8Vn3PkoJxoa0yQ4PARDlKr6UlJp5-LKEi5y-VpAjkB0VQANvsQVsCycQe2ObAxP5e3t_K9YcySwrCU28kTdrKyBDgeRZXzirsCZxv0GMDTBzA41-D9hgY3ypnA8EzMJ4BMb6LHVhSAMDUi6IeEwcmnuLzreFnOl9M09AbfEGDp-ngVT2QJK1AW6MtwjOM0gwYy1fpuEkO5MD16OUE6-LkZvtBmmfR_Lwcr9hgKwdDN5dzCd96_59EwVGH_iYdhR7gBWqYKJgodHjx2KJHq_BlZKKcEERP2RX8bXF3x3t5ij-PNHg7U3hgPrVfzmzEPZjD_8kAmCgebzcbevDxGTD_AvrBUxzTk9SW8e186XujWUmUs8qN4vWdKO8r1xeoLBgvYR_tzGDFExhs6eOoRNzj5CrWfsDGt6PTDeO78T4Wd_TJ_QpJcT6fWVJUzgN1CK0zxr1qewR8k6eJQgmvHVoYQlwtjbRHcB5--fZ7Ca-auulYyfie8T1P4rDbRvomnlPu1GsjSTsLrdQmQI1KDgHhV75brX4ToANYR6BjpxNawmYJP7tXHOMklvBTWUKaXHQwgCYIg1IYQjsY8z1u-Uog-x6lD0CdpLilcTjLSorTQkAOtI3GSMfJiYajpPQ6RGeDVdHikiXF16iiA-Bbj4qwgRo7OeoYVcWSoiPqQ8yLV4xXR9fUztDS-SPj1TvjVffun9o_tuJ90eSi2YmdXGCebtaZSNN0lS66fJskos7SzVpu1Eoo3PLdqk43LfIVz1rMFjrnCV8nW75Js5TzdKl2bYaYqWwtkjaTGVsleJLaLI0ZT7H3QocwYJ6u19lqszCyRhOmLzjnKqbFOI8fc5_HA1_q4RjYKjE6ULhLkCaD-cdwy4f0qphexF0PNKXyLcaATVgM3uT_wKKpG-qlcifGq9jh8vel9-5PVMR4NTkOjFcX02PO_w4AAP__3AH-Jw">