forall(dtype T | sized(T)) T * malloc(void); forall(dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); }) T * new(Params p) { return ((T*)malloc()){ p }; // construct result of malloc } struct S { int x, y; }; void ?{}(S *, int, int); int main() { S * s = new(3, 4); }