Учитывая следующий код:Экспресс предпочтение в случае неоднозначных шаблонных функций
struct Zero{};
template<typename T>
Zero operator*(const Zero& zero, const T& other){return Zero();}
struct Identity{};
template<typename T>
T operator*(const T& other, const Identity& id){return T();}
Теперь я хочу использовать этот код, как это:
Zero z;
Identity id;
int i = 5;
z * i; // ok
i * id; // ok
z * id; //error: ambiguity in function resolution
компилятор не сможет разрешить оператора в последней строке, поскольку обе функции могут использоваться. На самом деле в этом случае мне все равно, какая функция используется, поскольку они имеют одинаковую функциональность. В обоих случаях Zero() будет возвращен, как ожидалось.
Вопрос: Как я могу выразить, что в этом случае любая из функций в порядке?
BTW: Вы могли бы хотите взглянуть на 'constexpr'. – Deduplicator