Dobrar expressões com chamadas arbitrárias?

Examinando o C ++ 17papel nas dobras (ecppreference), Estou confuso sobre por que a escolha foi feita para funcionar apenas com operadores? À primeira vista, parece que seria mais fácil expandir(... + args) apenas empurrando um+ token entre os elementos deargs, mas não estou convencido de que é uma ótima decisão.

Por que uma expressão lambda binária não funciona tão bem e segue a mesma expansão que a anterior acima? É chocante para mim que uma sintaxe dobrada seja adicionada a um idioma sem suporte para chamadas arbitrárias, então a sintaxe permite uma maneira de usá-las que simplesmente não estou vendo?

Atualizar: Isso funciona para uma variávelmin() função com 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;
}

questionAnswers(2)

yourAnswerToTheQuestion