Есть два целых числа типа std::intmax_t
Необходимо произвести над ними одну из следующих операций: сложение, вычитание, умножение.
Но при переполнении результата преобразовать числа в double перед операцией и вернуть double.
А если переполнения нет, то вернуть целый результат.
Можно конечно сделать double операцию, и сравнить результат с диапазоном min() max() целого. Если всё ок, то произвести целочисленную операцию.