// a struct method can return an owned object: its header declares the .u return struct Node { int v; } struct Maker { static Node*.u make(int n) { Node* p = new(Node); p.v = n; return u*p; } } Node*.u mk(int n) { Node* p = new(Node); p.v = n; return u*p; } int main() { Node*.u a = Maker.make(7); put_n(a.v); put_c(32); free(d*a); Node*.u b = mk(9); put_n(b.v); put_c(10); free(d*b); return 0; }