#include <stdio.h>

#define LIST int: foo1
#define LIST LIST, double: foo2	    // Add double to the list
#define LIST LIST, default: bar	    // Add default

#define foo(X) _Generic((X), LIST)(X)


void foo1(int x)
{
    printf("foo1\n");
}

void foo2(int x)
{
    printf("foo2\n");
}

void bar(char x)
{
    printf("bar\n");
}

int main(void)
{
    foo(1);
    foo(1.1);
    return 0;
}