uintmax_t
- это typedef для целочисленного типа без знака максимальной ширины на вашем компьютере. При компиляции кода, если этот тип не точно unsigned long long
, тогда этот вызов:
Binary fileContent((unsigned long long)fileSize);
неоднозначен, поскольку аргумент должен быть меньше go ровно одно преобразование чтобы соответствовать одному из этих конструкторов:
Binary(uintmax_t containerSize); // conversion from unsigned long long to uintmax_t needed
Binary(unsigned char binary); // conversion from unsigned long long to unsigned char needed
, и компилятор не может выбрать между ними, и возникает ошибка.
Если uintmax_t
оказывается точно unsigned long long
, то 1-й конструктор является точным совпадением, выбирается, и программа компилируется. Предположительно, это разница между версией компилятора macOS и Windows, которую вы видите.