(compilation "-- -std=c99 -pedantic-errors") (input) (output "c99: 42") (return 0) ;;; The closure environment is part of the ABI, so its union is declared ;;; in every translation unit whether or not one is used. That put ;;; whatever it was written with into every program: `max_align_t' named ;;; the alignment in one word, and made C11 the floor for a program with ;;; no closure in it at all. ;;; ;;; The widest built-ins say the same thing -- a union is aligned for the ;;; strictest of its members -- and say it in C99. ;;; ;;; Closures themselves still want C11 for the `_Static_assert' that ;;; checks the captures fit, so this program keeps clear of them. (include stdio.h) (struct point ((x int) (y int))) (fn area ((p (struct point))) int (return (* (. p x) (. p y)))) (pub fn main () int (var p (struct point) #((struct point) : 6 7)) (printf "c99: %d\n" (area p)) (return 0))