You're asking for ugliness!
Code:
#define PAIR_INIT(T1,T2) \
typedef struct { \
T1 first; \
T2 second; \
} pair##T1##T2
#define PAIR(T1,T2) pair##T1##T2
#define make_pair(T1,T2,v1,v2) (pair##T1##T2) { .first = v1, .second = v2 }
typedef char * String;
PAIR_INIT(String,double);
int main(void)
{
PAIR(String,double) p;
p = make_pair(String,double,"foo",3.0);
printf("%s %f\n", p.first,p.second);
return 0;
}
Note: you need to typedef char* String;
C does not have generic.
I still don't see how generic solves your problem?
Perhaps you should follow C approach. Take a look at bsearch(),qsort(). They are examples of doing generic in C way.