#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
}
