Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Type-safe sum types in C
// needs -fnested-functions. Can be done without, but makes the whole thing a lot more cumbersome
// and less useful.
#include <stdio.h>
#define my_data_alts ( void (*A)(int) , void (*B)(int, int) , void (*C)(char, int) )
#define make_my_data(n) void n my_data_alts
typedef void (*my_data) my_data_alts;
void show(my_data match) {
void A(int n) { printf("A %d", n); }
void B(int a, int b) { printf("B %d %d", a, b); }
void C(char a, int b) { printf("C %d %c", a, b); }
int main() {
make_my_data (foo) { A(1); };
show (foo);
return 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment