<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">