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。 –