Index: doc/rob_thesis/examples/variadic/new.c
===================================================================
--- doc/rob_thesis/examples/variadic/new.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/variadic/new.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,13 @@
+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);
+}
Index: doc/rob_thesis/examples/variadic/print.c
===================================================================
--- doc/rob_thesis/examples/variadic/print.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/variadic/print.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,11 @@
+forall(otype T, ttype Params |
+  { void print(T); void print(Params); })
+void print(T arg, Params rest) {
+  print(arg);
+  print(rest);
+}
+void print(const char * x) { printf("%s", x); }
+void print(int x) { printf("%d", x);  }
+int main() {
+  print("x = ", 123, ".");
+}
