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

    <tr>
        <th>Summary</th>
        <td>
            Copy elision when initializing a base class subobject
        </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>
    According to https://github.com/llvm/llvm-project/issues/33864 
> Copy elision cannot be guaranteed when initializing a base class subobject, because base classes can have different layout than the corresponding complete object type.

But if we slightly modify the code example as follows:
```
struct Base {
    Base(Base&&) = delete;
    Base() {}
};

Base make_base() { return {}; }

template<typename F>
struct call_wrapper {
    F&& f;
    constexpr operator decltype(auto)() && {
        return static_cast<F&&>(f)();
 }
};
template<typename F>
call_wrapper(F&&) -> call_wrapper<F>;

struct B : public Base {
    B() : Base(call_wrapper{make_base}) {} // <<< error in GCC, ok in Clang
};
```

Then Clang starts accepting it and performing copy elision for base class initialization. It looks like a bug because of the same reason. Please note that GCC keeps rejecting the modified example. Online demo: https://gcc.godbolt.org/z/rMbhdf61v

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVF2PqzYQ_TXOy-hGxCZL8sBDPpaqD1X70PeVsQdwY2xkD5ub--srQ7JZbldVVWQZge0zZ2Z8jozRtA6xZNsj255XcqTOh7JCHVa117fyoJQP2rgWyENHNEQmDoxXjFetoW6s18r3jFfWvj9e34bg_0JFjFcmxhEj45UQu5ccWHZm2YGJVzj54QZoTTTegZLOeYIaoR1lkI4QNVw7dGCcISOt-ZEISKhlRFBWxghxrH09RzlBjUqOET-tY0yo0Ml3BG2aBgM6AitvfiSgTjqgDkH5EDAO3k0JKt8PFglhBga6Dbi-U57m40hgGrgiRGvajuwNeq9Nc7uDaQT8LhMIyAiNt9Zfp3LNGC_ZfUyfkcKoCI6JMiuO808AmP4wvptfL9PYAxNn0JjYMfHPvdOO4siK8z1Ucf7YdqeewvTygm_14ggEpDG4x2lxhCfINBP2g5Up7CnVw8keoWLidZGEkta-XYMcBgzLZKo5BWgWtJV3kfD7EMAPGCT5ABqVTQEY38mRPOP7B8kZYIGanjvxSJKMelMyEhOne7jEj--aD5Bn8C9L9O85fk6O8V31bMq3dJMXy4mBeP2p9o9OAxMHGMbaGvVV2x_5isOjrQvo4vhsX3F-dhxmMQITp3kAhuADGAe_nE5JHf6SPk5WuvaL67G8lfP8Z9LedCDVN1AEqRQOlFRiCKTTMGBofOhn3XzScuPDZ5l-CFiS8W4NvxJY7y8RrLlgUvTYfqjXN5OOYip_QBnT_j8sJjDnCZNsKeUEF8QhQsCk0smZOpyFaFA_FLiG3501DkFj71NNf_Iupdat17W3tPahZbz6wXgVfqs73bxs3ucyrHQp9F7s5QrLzUshcr7hu2zVlTnWTbHf7ra5VlrrLee7Yl9stnXNBc-lWpmSZ1xkm80mKzZ5nq2LPC9kxmuV5dm22OYsz7CXxq6TYSYGq8kqy-1-z_nKyhptnDyZc4dXmBYZ58miQzmZbD22keWZNZHiE4UMWSwX7vpfjXQ1Blv-f4efmP8dAAD__xTU8lQ">