// The unit type in ML or Python, (), is a tuple of zero items. It // has size zero and one possible value. GCC supports this as a GNU // extension to standard C: // #include typedef struct {} unit; static unit f(unit *p) { return (unit){}; } static void g(unit u) { } int main() { unit a = {}, b = {}; a = b; f(&a); g(b); // In GCC Debian 12.2.0-14 these two variables get the same // address; in Debian clang version 14.0.6 they get different // addresses unless you turn on optimization. printf("a is at %lx, b is at %lx, " "sizeof unit is %d\n", (unsigned long)&a, (unsigned long)&b, (int)sizeof(unit)); return 0; }