https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85892
Bug ID: 85892 Summary: value-initialization failure Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: Casey at Carter dot net Target Milestone: --- This test program aborts because `collector`'s base `item` isn't properly zero-initialized: void* operator new(decltype(sizeof(int)), void* ptr) { return ptr; } struct item { int data; }; struct collector : item { collector() = default; collector(int) {} }; struct tuple : collector { tuple() : collector{} {} }; int main() { alignas(tuple) unsigned char space[sizeof(tuple)]; for (auto& c : space) c = 0xff; auto ptr = ::new(&space) tuple; int& i = static_cast<item&>(*ptr).data; if (i != 0) __builtin_abort(); } Default-initialization of `tuple` invokes its constructor, which value-initializes its `collector` base subobject, which should zero-initialize `collector`'s `item` base subobject.