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