#include<iostream>
#define UPDATE(VAR) VAR; \
public: void updateMyClassValue (const decltype(VAR)& value) { VAR = value; }
class Myclass {
public:
unsigned long long UPDATE(var1);
unsigned short UPDATE(var2);
signed short UPDATE(var3);
private: template<typename T> void updateMyClassValue (T);
};
int main ()
{
unsigned short s = 1;
Myclass m;
m.updateMyClassValue(s);
// m.updateMyClassValue(long(1)); // error
}
I2luY2x1ZGU8aW9zdHJlYW0+CgojZGVmaW5lIFVQREFURShWQVIpIFZBUjsgXApwdWJsaWM6IHZvaWQgdXBkYXRlTXlDbGFzc1ZhbHVlIChjb25zdCBkZWNsdHlwZShWQVIpJiB2YWx1ZSkgeyBWQVIgPSB2YWx1ZTsgfQoKY2xhc3MgTXljbGFzcyB7CnB1YmxpYzoKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBVUERBVEUodmFyMSk7CiAgICB1bnNpZ25lZCBzaG9ydCBVUERBVEUodmFyMik7CiAgICBzaWduZWQgc2hvcnQgVVBEQVRFKHZhcjMpOyAKCnByaXZhdGU6IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdXBkYXRlTXlDbGFzc1ZhbHVlIChUKTsKfTsKCmludCBtYWluICgpCnsKICB1bnNpZ25lZCBzaG9ydCBzID0gMTsKICBNeWNsYXNzIG07CiAgbS51cGRhdGVNeUNsYXNzVmFsdWUocyk7CiAgLy8gbS51cGRhdGVNeUNsYXNzVmFsdWUobG9uZygxKSk7IC8vIGVycm9yCn0K