Оглядываясь на С++ 17 paper на складках, (и на cppreference), я смущен тем, почему был сделан выбор только для работы с операторами? На первый взгляд кажется, что было бы легче расширить (... + args)
, просто нажав токен +
между элементами args
, но я не убежден, это отличное решение.
Почему бинарное лямбда-выражение не может работать так же хорошо и следует тому же расширению, что и последнее? Мне кажется, что синтаксис сложения будет добавлен на язык без поддержки произвольных вызовов, так же как и синтаксис позволяет использовать их, которые я просто не вижу?
Обновление: Это работает для вариационной функции min()
с clang
template <typename T>
struct MinWrapper {
const T& obj;
};
template <typename T, typename U, typename V=std::common_type_t<T,U>>
constexpr MinWrapper<V> operator%(
const MinWrapper<T>& lhs, const MinWrapper<U>& rhs) {
return {lhs.obj < rhs.obj ? lhs.obj : rhs.obj};
}
template <typename... Ts>
constexpr auto min(Ts&&... args) {
return (MinWrapper<Ts>{args} % ...).obj;
}