<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60522>60522</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
diagnostic divergence between -std=c++20 and -std=c++17 when referencing member of std::vector of incomplete type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ldalessa
</td>
</tr>
</table>
<pre>
In the following code example, I perform a value initialization of a std::vector of incomplete type.
```c++
#include <vector>
struct B;
struct A {
std::vector<B> _;
};
A a{}; // <--here
struct B {};
```
https://godbolt.org/z/ab5Erqc1n
This runs afoul of the second half of https://eel.is/c++draft/vector#overview-4. "T shall be complete before any member of the resulting specialization of vector is referenced." I do not know if this is ill-formed or undefined behavior.
Staring in `clang-15`, this is diagnosed as invalid, but only with `-std=c++20`. Thisimplies to me that this diagnostic is probably incidental. For consistency it would be helpful if this diagnostic could be emitted for all standard versions, as a Quality of Implementation improvement.
As a reference I have added https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108669 to normalize this diagnostic across clang and gcc.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVE2P4jgT_jXmUiIKdiDNIQf6A6mPr965jxy7ktSuY7O2E5b-9atKM3TDjrRSBFLF9biej5ROiXqP2Ijts9i-rvSUhxAbZ7XDlPSqDfbSvHvIA0IXnAtn8j2YYBHwbz2eHAr5Au9wwtiFOIKGWbsJgTxl0o4-dKbgIXSgIWUr1EGow4wmh8hF8iYwSEbIlxMWonwV5eH6uys_HyPkMz-fVanIGzdZBKFePpGEevvemHKcTIZnoZ5_Uz6AqK91AHgcSqiXZ6He4OdXc_36AHQAzRBLHUDIo5BHHma9HjDi7yaB2_kHat8PDzmfEs-yAPbBtsHlIsReyOOHkEfdbt_iX2bjvzf9GChBnHwC3YXJsaZsVUITvIVBu45L99CIrqAk5PEqrI26y0IerwpIFWaMM-F5XRUgpPwBadDOQYtwc6vFLkQE7S8w4thi_HVzxDS5zCFJJzT3Ebj6zhNjhxG9QVsIKeEdbAAfMvzpwxmIkSjxOXJuzblCCyHC5C125NFCi4OeKcS7wPw_68gXkwdOjdO-X2-2rLJ8uSFa0r0PCS3oBORn7cjy-3bKELy7wJnywP3rJRmvV40ku1UAy03jyREmyAFGhDzo_Al-Rc5k-J5TDK1u3YUjThZ91q6AY4hggk-UMnpzAcpwDpNjPjCgO3WTu7H_Bmd-ncGRckYLXYjAjqSsvdXRwowxUfCJmegEGv43aUf5wqq_s2UjT7D4QOMphnkp3Kl34LabL_AOg54RtLVoH_LTG1P0frpGs536D3JOC3lMQzj_bKe-MD0JdSTWb1M-7XZ7FsuHOHIc8F_8tIkhJVgcA-0t8A0r2yi7V3u9wmazq7fVrq63-9XQVLhTZvP0tNko9VTV5dY-bTal6mpdd1W7MytqZClVKUslVSXVvpBVWdWt6VSt5N5UlahKHDW5wrl5ZBorSmnCZldupVw53aJLy0KU0uMZlpdCSt6PseGedTv1SVSlo5TTF0qm7LD5RszSjLFf9GwxnxE9PMZq4Xtf3NRwHtDfzOBMf31k_71FV1N0zYNllIepLUwYhTzyvNe_9SmGP9Dw17-w5K2wqPBPAAAA__9AfPOv">