#include <utility>
#include <type_traits>
#include <cstdint>
struct strict_uint64_t
{
public:
template <typename ArgT, typename Check = typename std::enable_if<std::is_same<ArgT, uint64_t>::value>::type >
strict_uint64_t(ArgT arg)
: value(arg)
{ }
operator uint64_t() const
{
return value;
}
private:
uint64_t value;
};
int main() {
//strict_uint64_t a = 2LL; //error
//strict_uint64_t b = 2; //error
strict_uint64_t c = 2ULL;
return 0;
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPGNzdGRpbnQ+CgpzdHJ1Y3Qgc3RyaWN0X3VpbnQ2NF90CnsKcHVibGljOgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1QsIHR5cGVuYW1lIENoZWNrID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEFyZ1QsIHVpbnQ2NF90Pjo6dmFsdWU+Ojp0eXBlID4KICAgIHN0cmljdF91aW50NjRfdChBcmdUIGFyZykKICAgICAgIDogdmFsdWUoYXJnKSAKICAgIHsgfQogCiAgICBvcGVyYXRvciB1aW50NjRfdCgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogCnByaXZhdGU6CiAgICB1aW50NjRfdCB2YWx1ZTsKfTsKCmludCBtYWluKCkgewoJLy9zdHJpY3RfdWludDY0X3QgYSA9IDJMTDsgLy9lcnJvcgoJLy9zdHJpY3RfdWludDY0X3QgYiA9IDI7IC8vZXJyb3IKCXN0cmljdF91aW50NjRfdCBjID0gMlVMTDsKCXJldHVybiAwOwp9