Рассмотрим следующий минимальный пример:
#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()
.
Какое именно ожидаемое поведение при смешивании флеш-выражений и пустых пакетов параметров?