#include <iostream>
struct _int {
int i;
_int(int i) : i(i) {}
operator int() {
return i;
}
~_int() {
std::cout << "~_int\n";
}
};
struct _float {
float f;
_float(float f) : f(f) {}
operator _int() {
return _int((int) f);
}
~_float() {
std::cout << "~_float\n";
}
};
void print_int(const _int& i) {
std::printf("%i\n", i.i);
}
int main(int argc, const char* args[]) {
print_int(_float(3.141));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IF9pbnQgewogICAgaW50IGk7CiAgICBfaW50KGludCBpKSA6IGkoaSkge30KICAgIG9wZXJhdG9yIGludCgpIHsKICAgICAgICByZXR1cm4gaTsKICAgIH0KICAgIH5faW50KCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAifl9pbnRcbiI7IAogICAgfQp9OwoKc3RydWN0IF9mbG9hdCB7CiAgICBmbG9hdCBmOwogICAgX2Zsb2F0KGZsb2F0IGYpIDogZihmKSB7fQogICAgb3BlcmF0b3IgX2ludCgpIHsKICAgICAgICByZXR1cm4gX2ludCgoaW50KSBmKTsKICAgIH0KICAgIH5fZmxvYXQoKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ+X2Zsb2F0XG4iOyAKICAgIH0KfTsKCnZvaWQgcHJpbnRfaW50KGNvbnN0IF9pbnQmIGkpIHsKICAgIHN0ZDo6cHJpbnRmKCIlaVxuIiwgaS5pKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3NbXSkgeyAgICAKCXByaW50X2ludChfZmxvYXQoMy4xNDEpKTsKfQ==