Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Type-safe sum types in C

View gist:3643591
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// 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); }
match(A,B,C);
}
 
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
Something went wrong with that request. Please try again.