Кейси быстро ответил через список проблем range-v3 .
Вот его комментарий в виде текста по запросу вместо исходного изображения, которое я разместил здесь:
ranges::sort
без аргумента компаратора требует, чтобы тип был
отсортировано по модели концепции StrictTotallyOrdered
. Это означает
тип должен определять все ==
, !=
, <
, >
, <=
и >=
с
последовательные семанты.
На что я ответил там:
Спасибо, что так быстро вернулись. Теперь я понимаю. я должен сказать
это немного разочаровывает, это несовместимо с std::sort
и
boost::sort
требования. Вот цена, которую мы платим за range-v3
прелесть, я думаю.
Еще раз спасибо, --Matt.
К сожалению, требования выше, чем std::sort
и boost::sort
, поэтому код не будет просто работать. Я понимаю мотивацию.
Для любопытных std::rel_ops
и boost/operators
, казалось, мешали моей цели поддержки совокупной инициализации для интроспективных структур, поэтому я, к сожалению, прибегнул к макросам (аналогично приведенным ниже).
Я поиграю еще немного и поищу лучшее статичное полиморфное решение.
С уважением,
-. Matt
#define JEST_STRUCT(T) \
constexpr bool operator==(const T &b) const noexcept { \
return hana::equal(hana::to_tuple(*this), hana::to_tuple(b)); \
}; \
\
constexpr bool operator!=(const T &b) const noexcept { \
return hana::not_equal(hana::to_tuple(*this), hana::to_tuple(b)); \
}; \
\
constexpr bool operator<(const T &b) const noexcept { \
return hana::less(hana::to_tuple(*this), hana::to_tuple(b)); \
}; \
\
constexpr bool operator<=(const T &b) const noexcept { \
return hana::less_equal(hana::to_tuple(*this), hana::to_tuple(b)); \
}; \
\
constexpr bool operator>(const T &b) const noexcept { \
return hana::greater(hana::to_tuple(*this), hana::to_tuple(b)); \
}; \
\
constexpr bool operator>=(const T &b) const noexcept { \
return hana::greater_equal(hana::to_tuple(*this), hana::to_tuple(b)); \
}