#ifndef COSMOPOLITAN_LIBC_TYPE2STR_H_
#define COSMOPOLITAN_LIBC_TYPE2STR_H_
#if __STDC_VERSION__ + 0 >= 201112
/* clang-format off */

#define _TYPE2STR(X)                          \
  _Generic(X,                                 \
    _Bool:              "_Bool",              \
    signed char:        "signed char",        \
    unsigned char:      "unsigned char",      \
    char:               "char",               \
    short:              "short",              \
    unsigned short:     "unsigned short",     \
    int:                "int",                \
    unsigned:           "unsigned",           \
    long:               "long",               \
    unsigned long:      "unsigned long",      \
    long long:          "long long",          \
    unsigned long long: "unsigned long long", \
    __int128:           "__int128",           \
    unsigned __int128:  "unsigned __int128",  \
    float:              "float",              \
    double:             "double",             \
    long double:        "long double")

#define _PRINTF_GENERIC(X, D, U) \
  _Generic(X,                    \
    _Bool:              "hhh" U, \
    signed char:        "hh" D,  \
    unsigned char:      "hh" U,  \
    char:               "hh" D,  \
    short:              "h" D,   \
    unsigned short:     "h" U,   \
    int:                D,       \
    unsigned:           U,       \
    long:               "l" D,   \
    unsigned long:      "l" U,   \
    long long:          "ll" D,  \
    unsigned long long: "ll" U,  \
    float:              "f",     \
    double:             "f",     \
    long double:        "Lf")

/* clang-format on */
#endif /* C11 */
#endif /* COSMOPOLITAN_LIBC_TYPE2STR_H_ */