考虑以下最小示例:
#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<>(), "!");
}
注释行无法编译。
这同样适用于使用*
而不是+
。
涉及布尔值的那个可以代替。
在这里(工作草案)我没有找到关于空参数包的提及。
另一方面,这里(isocpp)似乎上述情况下的默认结果是int()
.
混合折叠表达式和空参数包时的预期行为到底是什么?