Я хочу написать функцию, которая выполняет разделение между двумя аргументами a
и b
другого типа, используя выражение a/b
, если оператор деления определен или возвращается в a * (1/b)
, если там не является таким оператором.
Это то, о чем я думал, но я не знаю, как отключить второе определение (или приоритет первого), когда определены операторы *
и /
:
template<typename T, typename U>
auto smart_division(T a, U b) -> decltype (a/b) {
return a/b;
}
template<typename T, typename U>
auto smart_division(T a, U b) -> decltype (a * (U(1)/b)) {
return a * (U(1)/b);
}