<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/124088>124088</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
std::variant of inner class cannot be created if inner class has initializers
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tbleher
</td>
</tr>
</table>
<pre>
The following code does not build:
```
#include <variant>
struct X {
struct A { int a=0; };
struct B {
std::variant<X::A> a;
};
};
void test() {
X::B b;
}
```
See https://godbolt.org/z/4ExGEvTf6 (on clang-trunk, with -std=c++20 -O2).
The error is:
```
<source>:11:10: error: call to implicitly-deleted default constructor of 'X::B'
11 | X::B b;
| ^
<source>:6:28: note: default constructor of 'B' is implicitly deleted because field 'a' has no default constructor
6 | std::variant<X::A> a;
| ^
```
Each of the following changes will make the code compile:
- making A and B top-level classes
- Changing class A to not have an initializer for a
- Changing class A to have an explicit constructor (like `A() : a(0) {}`)
I think this code should be accepted. GCC accepts this code since version 14.1 (previous versions reject it with an error message similar to clang's message).
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVMuy2jgQ_Zpm0wVlS_jBwgvDhdSsZjFZZCvLDdZcIVGSzE3y9VNtm_tKUjUuyhbqh87p7iMVo7k4ogaKPRRPKzWmwYcmdZYGCqvO9z-arwPh2VvrX4y7oPY9Ye8povMJu9HYHmQLWQtltvyyFoQ0TtuxJwR5uKtglEsgj2zK2pjCqBN-Q6j2kLWIiMtWy1toXEIF8ikDuUeonkBObovP_l3YHDoBkO3rMYdv80YL8siJHt6vqd4WWXv3psdEMYGoQeweyZcUe-zeQj5y_IcIh5RukT3FCcTp4vvO27Tx4QLi9BPEaXv8_uV4_3ouEUTtHWqr3GWdwuieQRzwxaQB1xOBJw1iD2IvMlz_LUDsNjM8Lj6F4AOa-Js6y0P0Y9DEtZVtnvMrA9nOMbzQylpMHs31Zo02yf5Y92QpUY89ndVoE2rv5tr6gP6MIKoHexDVXLs8R6gOU70_V-bVMD1QHH_FVYJsRc1onE_E3z8fzWeiie_w4gNvR1qNkfBsyPbsq9h3UDyKv8u4tL2cEP7_McGPjH59Fo7v-5C1R6UHppA-qmVQ7kIRX4y1eFXPNNknDWl_vRlLc1PXbOSAFpXrcY_J39aW7mR5ZmKkODkdON2Ulzex5cayDAd1J1QOjTPJKGt-UsCzD6j-GPWIoO9zmT90AkRtzTMhlCzlWRayRQWizh4aqZ6YutjN7P_CNBj3zO8404uDHy33DJXWdEvUb_DL4bD8i-89jdOEdwrReIf5dpMzgFugu_FjfBgiBvqXdEKTZt0w-EkYV4pRXTjP1VgVmN2kMxBVfBhZUKu-kf1O7tSKmrySVSny3a5cDU2mqBC1lrk4q7oQsu-L3bauzwV1_VYUtDKNyESR5UJm9baU5aaqhdJFTVVVlGWx7WCb0VUZu7H2fmX9r0yMIzW52GZ1vbKqIxunO1YIRy84WUEIvnJDw0HrbrxE2GbWxBTf0iSTLDWfZ5fnzDhHYemoVm66jAl1IMVSMR8dWCPvZiOuxmCbT5eXScPYbbS_gjjx-ctnfQue6w7iNKGOIE4LrXsj_gsAAP__tAjicA">