struct A { int x, y, z; }; void ?{}(A * a, int x) { (&a->x){ x+999 }; a->y = 0; // not technically a constructor, but okay } // z never constructed struct B { A a1, a2, a3; }; void ?{}(B * b) { b->a2 = (A) { 2 }; // a2 used before constructed (&b->a1){ 1 }; } // a2, a3 never constructed void ^?{}(B * b) { b->a2 = (A) { 0 }; ^(&b->a1){}; } // a2, a3 never destructed int main() { B b; }