Попробуйте этот вариант:
out = "0123456789abcdef"[size_t(rhs % div)] + out;
, поскольку вы предоставили преобразования для всех типов типов без знака, но не для целых чисел со знаком.
И да, вы можете определитьнеявное преобразование в long int
просто определяет operator long
таким же образом, как и все другие преобразования.
Наконец, обратите внимание, что ваш выбор имени структуры зарезервирован POSIX и, вероятно,конфликт с будущими версиями заголовка стандартной библиотеки stdint.h
.