次の最小限の例を考えてみましょう。
#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()
。
フォールド式と空のパラメーター パックを混在させると、正確にはどのような動作が期待されますか?