https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118396
--- Comment #7 from Marek Polacek <mpolacek at gcc dot gnu.org> --- // PR c++/118396 extern "C" void __assert_fail(const char *, const char *); void *operator new(unsigned long, void *__p) { return __p; } struct Foo { virtual ~Foo() = default; }; struct Data { int status; Foo data{}; }; Data *P, *Q; struct vector { vector (const Data &__value) { P = static_cast<Data *>(__builtin_operator_new(0)); new (P) Data (__value); Q = P + 1; } Data *begin() { return P; } Data *end() { return Q; } }; int main () { vector items_(Data{}); for (auto item : items_) item.status == 0 ? void() : __assert_fail("oy", "118396.C"); }