折り畳みに関するC++17 の論文(およびcppreferenceに関するもの) を見てみると、なぜ演算子のみで動作するように選択されたのかについて混乱していますか? 一見すると、 の要素の間にトークンを(... + args)
押し込むだけで簡単に拡張できるように見えますが、これが素晴らしい決定であるとは確信が持てません。 +
args
バイナリ ラムダ式が同様に機能し、上記の後者と同じ展開ができないのはなぜですか? 任意の callable をサポートせずに折り畳み構文が言語に追加されることは私には不快です。
更新: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;
}