Разве вы не можете просто написать это так, чтобы оно повторялось, пока вы не остановитесь на двух параметрах?
Вот (непроверенный) фрагмент:
/*! Multi-Type Minimum of \p a and \p args. */
template <class T, class U >
//requires SameType <T , U >...
T multi_type_min(const T & a, const U & b)
{
return std::min(a, b);
}
/*! Multi-Type Minimum of \p a and \p args. */
template <class T, class U, class ... R >
//requires SameType <T , U, Args >...
T multi_type_min(const T & a, const U & b, const R &... c)
{
return std::min(a, multi_type_min(b, c...));
}
Я предполагаю common_type_min
вариант необходим, когда есть несколько общих типов.Попробуйте сравнить значения short
и long
.Из-за повышения типа short
будет преобразовано в long
для сравнения.Однако некоторое ограничение или инвариант приложения может дать вам знать, что оба значения могут быть представлены short
.В этом случае вы можете захотеть иметь common_type_min<short>(a,b)
.