10
考虑下面的小例子:折叠表达式和空参数pack:期望的结果是什么?
#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()
。
混合折叠表达式和空参数包时,预期的行为究竟是什么?
我很想知道为什么这些操作员被单挑出来,而不是使他们都形成不良。 – Borgleader
@Borgleader:参见[P0036R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0036r0.pdf)。然而[P0160R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0160r0.html)表示,空参数包的默认值已解决为完全移除;我不确定发生了什么变化,或者为什么这不会反映在当前的草案中。 – ildjarn
@ildjarn在全体会议上没有达成共识,所以最终他们投了P0036。 –