<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy1Vd2PozYQ_2vIixVEgITwwAObva2qqi_tqn1ExkzAd47N-WN307--M0A2m907qbrqENhmPP55Pn4et6Y7V79q5gdgR6OUeZa6Z6M1veUnFu0S520QntU4ZAN3jDNh9Cw0lnk4jYp7IM06SvePUVqSpoWvQVqC8gP3E7o_j5PaI823gDDjef2KJVsFMatnVcdPqC9PCyzqS-9AHdkpOI9WPAGTuK8U0qsz6-AoNXTvAI2NsjpK7qMJYHnn3zSTWqjQIXx2ILMabznuEGWfFo2pvXjOouJuljB8rh5nB6G4c-zxdR3NX6KwhAAc_jvfkTFZLV1DVjY3bjdPCDWB4Craq7hfzMBBdncxhnspGtwPrP9vkPUM-QrxLgxcd1Ow0QfPfhyejbTIManZL4cDI9Tf__zrEKUH1gbPDoojCSx8BuFRyZNcGAqh1EiP7-UIrJ0SyFxonZc-eGk07uHNQj9c7hm8jBhgR1PYB-WRBWgHZ9romQn8RuunZIl9eKLtp6j4ae_C4QczYjAfKJZSgV2jl8pYsCjrhVg7zUc3GFJRsp2F2L7sd80uXyupw8u61wFFmzRO4g0O4vhjsxwU2ihK76b3uuDm6NRlscE2Syhr2nig_nlA25gYQHyhWvAmdQ755o5cTHk93lSStKhf6VVcEtSxASxcI07oY2ixBrCmaY1RzSXfuLZpphS-yR6mt3kciXxNbXsXk3Plzbn97vOD2ZyAaZ9v0fseToY8GLwfKXYYzDlFcW-61igfG9uj5B_83PAbFH9vPtu3tekPoFh1rJNOhJnbH-AwGuKLeQJ7xKoeI1FQ9hW_ItkX-a4oaZil221Zrroq68qs5Cse_GBs9QCdXQWrqncGSj-EdoFS6unSrfG-oANOhHEu0Gl62Gb5Nl8NVUfA7T49imQPeSL4Pt-lAoqSJ-02T44rxVtQroq2yK1UwzObIHAcbe9X_98CWaVJmiabtEiTPM-TmJdQijTjiehEueEiyhM4caliwqG4r2w1QbahdzippPPuOonVTvYaYDIYLcTipKA6TDfBM1r37evxeh9SZeHISMZtH06AR0E6Oi_Xifa8XHeryZVq8uNfF0BWLA>53454</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Class with constructor template requiring copyable argument is not copyable by itself
        </td>
    </tr>

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

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

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

<pre>
    In the following program `struct A` has a constructor template `A(T)` requiring that the type `T` be copy-constructible. At the same time `A` itself must have implicitly defined copy-constructor:
```
#include <type_traits>

struct A {
    template <class T>
    A(T) requires(std::is_copy_constructible_v<T>) {}
};
static_assert(std::is_copy_constructible_v<A>);
```
and the last static_assert(std::is_copy_constructible_v<A>) passes in GCC and MSVC, but Clang rejects it, complaining:
```
error: substitution into constraint expression resulted in a non-constant expression
    A(T) requires(std::is_copy_constructible_v<T>) {}
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/12.0.1/../../../../include/c++/12.0.1/type_traits:971:30: note: while checking constraint satisfaction for template 'A<A>' required here
    : public __bool_constant<__is_constructible(_Tp, _Args...)>
                             ^~~~~~~~~~~~~~~~~~
...
```
Demo: https://gcc.godbolt.org/z/shKe7W1jr

Related discussion: https://stackoverflow.com/q/70874679/7325599
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VUuPozgQ_jXkYgURICEcONDp6dVqtZfd1u4RGbsCnnEw40d3Z3_9VgHpdLpnpNFIg8CYcvmrx1cuWiPP1e8D8z2wo9HaPKuhY6M1neUnFu0S520QntU4ZT13jDNhhlloLPNwGjX3QJp1lO4fo7QkTQtfg7IE5XvuJ3R_Hie1R1pvAWHG8_oVS7UaYlbPqo6fUF-dFljUV96BPrJTcB69eAKm0K4Syuszk3BUA8h3gMZGWR0l99EEsNzzZ5qpQeggET47kFuNtxwtRNmnRWMaL5GzqLibJQyva8TZQWjuHHt83UfrlywsKQCH385LciarlWvIy-Ym7OYJoSYQ3EW2ivvFDZxkdxdnuFeiQXtg_Y9B1jPkK8S7NPBBTsnGGDz7eXg20ibH1MB-OxwYof759z-HKD2wNnh20ByLwMJnEB6VPMmFoRSqAcvjexyBtROBzIXWeeWDV2ZAG94s5YfbPYOXERPsaAnfQXusAvSDs8EMcyXwG61fwhL7cEXbT1Hxy-6lhh_MiMl8oFwqDXaNUWpjwaKsE2LtBj663pCKVu0sxPFlv2t2-VqrIbysuyGgaJPGSbzBSRx_HJaDQoai9G66rxtujk5dFhscs4RYG4wHej_36BsTPYgv1AveUOew3tyRi4nX400nSYv6tbyKC0GS9WDhmnFCH0OLPYA1TWuMbi58496mmSh8wx7S2zyOVHxNbTsXU3Dlzbn97vWTbE7AZOdb5X0PJ0MR9N6PlDtM5kxR3BnZGu1jYzuU_IeP6_-A4t_NZ_u2N_0FlCvJpHIizLX9AQ6zIb6YJ7BH7OoxFgrKvuJTJPsi3xUlTbN0uy3LlawyWWYlX-FR01Adpr72rHz_7WZ_7e50Tjjml3HbhRMgscoR-9eF9rw071WwunoXMFoI7eKa1k-X1xr_P9QwqACdC3Q6H7ZZvs1XfSXS474tC5nJjG9FLnfFXhQJl1wcC8g3YqV5C9pV0RZrNR3gmU0QOI-29ytVpUmaJpu0SJM8z5OYl1CKNOOJkKLccBHlCZy40jH5QSysbDW51IbO4aJWzrvrIuZJdQPAZA7xefC9sdUDSLua7FaT3_8DpL1BSQ">