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

    <tr>
        <th>Summary</th>
        <td>
            clang c++20: Associated constraints added to a default constructor are excessively checked
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          frederick-vs-ja
      </td>
    </tr>
</table>

<pre>
    In the following code snippet, the declaration of typedef-name `CW` is accepted by msvc and gcc, but rejected by clang. [Godbolt link](https://godbolt.org/z/bGMdTh8qs).

I think clang is probably buggy here. When determining whether `decltype(ConstrainedWrapper<Wrapped>{std::declval<Wrapped>()})` is well-formed, clang seemly excessively requires the associated constraints of the default constructor to be satisfied, even if the default constructor is not selected.

```C++
#include <concepts>
#include <cstddef>
#include <utility>

struct NoDefaultCtor {
 constexpr explicit NoDefaultCtor(std::nullptr_t) {}
};

template<class T>
struct Wrapper {
    Wrapper() = default;
    constexpr explicit Wrapper(T x) : val(std::move(x)) {}

    T val{};
};

template<class T>
struct ConstrainedWrapper {
    ConstrainedWrapper() requires std::default_initializable<T> = default;

    constexpr explicit ConstrainedWrapper(T x) : val(std::move(x)) {}

    T val{};
};

using Wrapped             = Wrapper<NoDefaultCtor>;
using W [[maybe_unused]]  = decltype(Wrapper<Wrapped>{std::declval<Wrapped>()});
using CW [[maybe_unused]] = decltype(ConstrainedWrapper<Wrapped>{std::declval<Wrapped>()}); // <- clang is buggy here
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VUtv4zoP_TXKhkjgyImdLLzIYzKYxfetCnRZ6EHHmsqSR5LTZn79hSw3j05mFvde3MJQA9MkzyGpQ-a9OhrEiiy3ZLmfsD401lW1Q4lOidfpyU-_swm38lx9MxAahNpqbd-UOYKwEsEb1XUYCN0NVolCM8eCsgZsDeHcocR6aliLQIps90yKDJQHJgR2ASXwM7T-JIAZCUchYhzeB3D4HcVoF5qZ4wzIcvvVSm51AK3MK1nuCV01IXSe5BtCD4Qejsk-s-5I6OEnoQf-9X_yqVn98ISuZyTbk2yTzm8QGmVeU_CIqHOWM67PwPvj8QwNOpzBc4MGJAZ0rTKR81uDoUEXuUSqkR-hq501PjimDMpnx7oOHcl36Zck-RdSbn2QEWW-iV4npu_tdEXompT7eKb6vKHW09q6FmUsSULpEVt9BnwX6L06oT6Dwx-9cuiH4jPvrVAslk18IAp-6MPQmpr1OoymXgTrIFjgCJ4F5WuVUuEJDajfuygPxgbwqIcG3RWVFFl6doRu45Pe0lwZoXuJQPKdsCa23kfej8w-SIn1b6x9UFqF89U6nAkb_N_uE95dxEnKMX1Cj--dA3zvtBLq06eEri7tMb3WXXAvgdD1EKLcj5nKPcm3t1kDtp1mASNozbyHpwusEdA4CzdQAD5epp4DyfcfVb6Ej189wHx1fIL35LuBOEo38Ft7ivMYzb8QuMR-GryS6ULpb9D7dervmT64FYn0ZWhvbsVQghdlVFBMq5-M65g55nxYoz9W6mHi_6RovY8iMd5suP2LJK7acD9_-ZdLmDEADHq8bdmZ40tveo8y6t1yD2M1LtLzj_XmPvPuD6k_Zf43RS_fQlLweMmnV1G-avEngZnIKpfrfM0mWM2LclEUS1oUk6aaL1YLulrSmnI-rwuxyOm6zqisyxVSVpcTVdGM5tmcLufFolwUMyn4vJCyzDnNOS3WZJFhy5SeaX1q4yqZKO97rIqMrvOJZhy1H_YlpQbfYDASSuP6dFX0mfL-6Mki08oHf40SVNBYJWoi6SPN4jhuHss2kxJlVGj2UIeZw7tNIBoUrygnvdPVp62oQtPzmbAtoYcIZ_w37ZyNW5bQw0DCE3oYSP4VAAD__8eohUA">