C ++ функции для целочисленного деления с четко определенной стратегией округления

Я хочу что-то в C ++, что позволяет мне делать эффективное целочисленное деление с указанным поведением округления, что-то вроде этого:

div_down(-4,3)        ==> -2
div_up(4,3)           ==> 2
div_to_zero(-4,3)     ==> -1
div_to_nearest(5,3)   ==> 2

Мне бы хотелось, чтобы он определял поведение целевой машины во время компиляции и генерировал соответствующие оптимальные реализации. Нечто подобное для модуля также было бы неплохо, абстрагируя неопределенное поведение для отрицательных операндов во время компиляции.

Это существует?

Если нет, какой хороший способ сделать это? Я могу придумать несколько возможных подходов:

Попробуйте реализовать их как отдельные выражения, которые статически оптимизируютИспользуйте константные выражения для определения поведения цели и выбора из нескольких реализаций, например, с использованием шаблонов (но как именно?)

Ответы на вопрос(3)

Ваш ответ на вопрос