#include <stdio.h>

#define CAT_(x, ...) x ## __VA_ARGS__
#define CAT(...) CAT(__VA_ARGS__)

#define CHECK_N(x, n, ...) n
#define CHECK(...) CHECK_N(__VA_ARGS__, 0)
#define PROBE(x) x, 1

#define IS_CHAR(t) CHECK(CAT_(IS_CHAR_, t))
#define IS_CHAR_char PROBE(~),

#define QUOTE_(...) #__VA_ARGS__
#define QUOTE(...) QUOTE_(__VA_ARGS__)

#define PRINT(...) puts(QUOTE(__VA_ARGS__))

int main(void)
{
    PRINT(IS_CHAR(char), IS_CHAR(int), IS_CHAR(char**));
    return 0;
}
