include_c "stdlib.h"; struct foo { int x; float y; }; model SizeOf { fun size_of() -> int@ { let a = @foo{x=1,y=d2f(3.0)}; return sizeof(a); } }; fun foo_mems(foo f) -> int@ { return f.x + f2i(f.y); } fun placement_test where { SizeOf, DefaultConstructible, Regular } (T a, fun(T)->int@ fn) -> int@ { // Copy construct let p1 = malloc(sizeof(a)); let f1 = new (p1) T(a); let n1 = fn(*f1); destroy f1; free(p1); // Default construct let p2 = malloc(sizeof(a)); let f2 = new (p2) T(); *f2 = a; let n2 = fn(*f2); destroy f2; free(p2); return n1 + n2; } fun main() -> int@ { let a = @foo{x=1,y=d2f(3.0)}; return placement_test(a, foo_mems) - 8; }