折叠表达式和空参数包:预期结果是什么?

Fold expressions and empty parameters pack: what's the expected result?

考虑以下最小示例:

#include<cstddef>

template<std::size_t... I>
constexpr auto sum() { return (I + ...); }

template<bool... B>
constexpr auto check() { return (B && ...); }

int main() {
    static_assert(6 == sum<1,2,3>(), "!");
    // static_assert(0 == sum<>(), "!");
    static_assert(check<true, true>(), "!");
    static_assert(check<>(), "!");
}

注释行不编译。
这同样适用于使用 * 而不是 +.
涉及布尔值的那个起作用了。

Here(工作草案)我还没有找到关于空参数包的提及。
另一方面,here (isocpp) 似乎上述情况下的默认结果是 int().

混合折叠表达式和空参数包时,预期的行为到底是什么?

[temp.variadic]¶9(引用 N4618):

If N is zero for a unary fold-expression, the value of the expression is shown in Table 14; if the operator is not listed in Table 14, the instantiation is ill-formed.

Table 14 — Value of folding empty sequences:

Operator  |  Value when parameter pack is empty  
-----------------------------------------------
&&        |  true
||        |  false
,         |  void()

P0036R0.

中概述了仅支持这三个运算符的原因