#include <iostream>
#include <algorithm>
using namespace std;
class Seconds;
class Hours {
unsigned long long _hours;
public:
Hours(unsigned long long hours) : _hours(hours) { }
unsigned long long getHours() const {
return this->_hours;
}
};
class Seconds {
unsigned long long _seconds;
public:
Seconds(unsigned long long seconds) : _seconds(seconds) { }
unsigned long long getSeconds() const {
return this->_seconds;
}
Seconds& operator= (const unsigned long long& ull);
};
unsigned long long operator+(const Hours& hours, const Seconds& seconds)
{
return hours.getHours() + seconds.getSeconds();
}
Hours operator "" _h(unsigned long long hours) {
return Hours(hours);
}
Seconds operator "" _s(unsigned long long seconds) {
return Seconds(seconds);
}
Seconds& Seconds::operator= (const unsigned long long& ull)
{
// do the copy
*this = Seconds(ull);
// return the existing object
return *this;
}
int main() {
Seconds s(1_h + 10_s);
cout <<s.getSeconds()<<endl;
s = 2_h + 60_s;
cout <<s.getSeconds()<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU2Vjb25kczsKCmNsYXNzIEhvdXJzIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX2hvdXJzOwogICAgcHVibGljOgogICAgICAgIEhvdXJzKHVuc2lnbmVkIGxvbmcgbG9uZyBob3VycykgOiBfaG91cnMoaG91cnMpIHsgfQogICAgICAgIAogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRIb3VycygpIGNvbnN0IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMtPl9ob3VyczsKICAgICAgICB9Cn07CgpjbGFzcyBTZWNvbmRzIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX3NlY29uZHM7CiAgICBwdWJsaWM6CiAgICAgICAgU2Vjb25kcyh1bnNpZ25lZCBsb25nIGxvbmcgc2Vjb25kcykgOiBfc2Vjb25kcyhzZWNvbmRzKSB7IH0KICAgICAgICAKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0U2Vjb25kcygpIGNvbnN0IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMtPl9zZWNvbmRzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBTZWNvbmRzJiBvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyYgdWxsKTsKfTsKCnVuc2lnbmVkIGxvbmcgbG9uZyBvcGVyYXRvcisoY29uc3QgSG91cnMmIGhvdXJzLCBjb25zdCBTZWNvbmRzJiBzZWNvbmRzKQp7CiAgICByZXR1cm4gaG91cnMuZ2V0SG91cnMoKSArIHNlY29uZHMuZ2V0U2Vjb25kcygpOwp9CgpIb3VycyBvcGVyYXRvciAiIiBfaCh1bnNpZ25lZCBsb25nIGxvbmcgaG91cnMpIHsKICAgIHJldHVybiBIb3Vycyhob3Vycyk7Cn0KClNlY29uZHMgb3BlcmF0b3IgIiIgX3ModW5zaWduZWQgbG9uZyBsb25nIHNlY29uZHMpIHsKICAgIHJldHVybiBTZWNvbmRzKHNlY29uZHMpOwp9CgpTZWNvbmRzJiBTZWNvbmRzOjpvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyYgdWxsKQp7CiAgICAvLyBkbyB0aGUgY29weQogICAgKnRoaXMgPSBTZWNvbmRzKHVsbCk7CiAKICAgIC8vIHJldHVybiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgICByZXR1cm4gKnRoaXM7Cn0KCmludCBtYWluKCkgewogICAgU2Vjb25kcyBzKDFfaCArIDEwX3MpOwogICAgY291dCA8PHMuZ2V0U2Vjb25kcygpPDxlbmRsOwogICAgcyA9IDJfaCArIDYwX3M7CiAgICBjb3V0IDw8cy5nZXRTZWNvbmRzKCk8PGVuZGw7CiAgICByZXR1cm4gMDsKfQ==