Ответ 1
Да.
size_t
определяется как целочисленный тип без знака, достаточно большой, чтобы содержать размер любого объекта. uintmax_t
определяется как способное хранить любое значение любого беззнакового целочисленного типа. Поэтому, если size_t
может сохранить его, uintmax_t
может его сохранить.
Определение size_t
из С++ 11 §18.2:
Тип size_t представляет собой целочисленный тип без знака, определенный для реализации, который достаточно велик, чтобы содержать размер в байтах любого объекта.
Определение uintmax_t
из C99 §7.18.1.5 (оно включено в С++ по нормативной ссылке):
Следующий тип обозначает целочисленный тип без знака, способный представлять любое значение любого беззнакового целочисленного типа:
uintmax_t