Я хочу написать функцию, которая выполняет разделение между двумя аргументами 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);
}