// Compile: cc test_6_5_expressions.c -std=c23
#include <assert.h>

#define KIND(x) _Generic((x), int: 1, double: 2, default: 0)
int id_i(int v){return v;}
double id_d(double v){return v;}

int main(void) {
  int i = 3;
  double d = 4.0;

  int r1 = _Generic(i, int: id_i(i), default: 0);
  int r2 = _Generic(d, double: (int)id_d(d), default: 0);
  static_assert(KIND(1+2) == 1, "int literal expression kind");
  assert(r1 == 3 && r2 == 4);
  return 0;
}
