#include <iostream>
#include <cstdarg>
using namespace std;
enum types
{
INT,
DOUBLE,
CHAR,
STRING
};
struct mt
{
types type;
union
{
int i;
double d;
char c;
const char *s;
} val;
mt(int i)
: type(INT)
{
val.i = i;
}
mt(double d)
: type(DOUBLE)
{
val.d = d;
}
mt(char c)
: type(CHAR)
{
val.c = c;
}
mt(const char *s)
: type(STRING)
{
val.s = s;
}
};
void print(int n, ...)
{
va_list ap;
va_start(ap, n);
for (int i = 0; i < n; i++)
{
mt x(va_arg(ap, mt));
switch (x.type)
{
case INT:
cout << x.val.i << endl;
break;
case DOUBLE:
cout << x.val.d << endl;
break;
case CHAR:
cout << x.val.c << endl;
break;
case STRING:
cout << x.val.s << endl;
break;
}
}
va_end(ap);
}
int main()
{
print(4, mt(2), mt(4.2), mt('a'), mt("Hello"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGFyZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgplbnVtIHR5cGVzCnsKICAgIElOVCwKICAgIERPVUJMRSwKICAgIENIQVIsCiAgICBTVFJJTkcKfTsKCnN0cnVjdCBtdAp7CiAgICB0eXBlcyB0eXBlOwoKICAgIHVuaW9uCiAgICB7CiAgICAgICAgaW50ICAgICAgICAgaTsKICAgICAgICBkb3VibGUgICAgICBkOwogICAgICAgIGNoYXIgICAgICAgIGM7CiAgICAgICAgY29uc3QgY2hhciAqczsKICAgIH0gdmFsOwoKICAgIG10KGludCBpKQogICAgICAgIDogdHlwZShJTlQpCiAgICB7CiAgICAgICAgdmFsLmkgPSBpOwogICAgfQoKICAgIG10KGRvdWJsZSBkKQogICAgICAgIDogdHlwZShET1VCTEUpCiAgICB7CiAgICAgICAgdmFsLmQgPSBkOwogICAgfQoKICAgIG10KGNoYXIgYykKICAgICAgICA6IHR5cGUoQ0hBUikKICAgIHsKICAgICAgICB2YWwuYyA9IGM7CiAgICB9CgogICAgbXQoY29uc3QgY2hhciAqcykKICAgICAgICA6IHR5cGUoU1RSSU5HKQogICAgewogICAgICAgIHZhbC5zID0gczsKICAgIH0KfTsKCnZvaWQgcHJpbnQoaW50IG4sIC4uLikKewogICAgdmFfbGlzdCBhcDsKCiAgICB2YV9zdGFydChhcCwgbik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgbXQgeCh2YV9hcmcoYXAsIG10KSk7CgogICAgICAgIHN3aXRjaCAoeC50eXBlKQogICAgICAgIHsKICAgICAgICBjYXNlIElOVDoKICAgICAgICAgICAgY291dCA8PCB4LnZhbC5pIDw8IGVuZGw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICAgICBjb3V0IDw8IHgudmFsLmQgPDwgZW5kbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSOgogICAgICAgICAgICBjb3V0IDw8IHgudmFsLmMgPDwgZW5kbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTVFJJTkc6CiAgICAgICAgICAgIGNvdXQgPDwgeC52YWwucyA8PCBlbmRsOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgdmFfZW5kKGFwKTsKfQoKaW50IG1haW4oKQp7CiAgICBwcmludCg0LCBtdCgyKSwgbXQoNC4yKSwgbXQoJ2EnKSwgbXQoIkhlbGxvIikpOwp9