Давайте рассмотрим класс таким образом с оператором less than
:
struct Test
{
int value;
constexpr bool operator<(const Test& p_rhs) const
{
return value < p_rhs.value;
}
};
Я хотел бы сгенерировать bool operator>(const Test&, const Test&)
, bool operator<=(const Test&, const Test&)
и bool operator>=(const Test&, const Test&)
без использования CRTP (или любого другого наследования) на Test
класс по стандарту generi c, который также может использоваться в других классах, имеющих bool operator<(const T&,const T&)
. Я попробовал вот так:
template<typename Lhs, typename Rhs = Lhs>
struct GenerateOtherComparisonsFromLessThan
{
constexpr friend bool operator>(const Rhs& p_rhs, const Lhs& p_lhs)
{
return p_lhs < p_rhs;
}
//and rest of other comparison operators
};
struct InstantiateTestComparisons : GenerateOtherComparisonsFromLessThan<Test>
{};
Но похоже, что эти перегрузки не принимаются (по крайней мере, на g cc 8.3 на ideone ).