Ваша попытка выглядит как смесь между унарным и двоичным выражением сгиба. Правильные формы выражения в виде одинарного или двоичного сгиба:
static_assert((... && std::is_fundamental<decltype(args)>::value)); // unary
static_assert((true && ... && std::is_fundamental<decltype(args)>::value)); // binary
Унарная форма работает, потому что пустая последовательность неявно эквивалентна true
.
Кстати, decltype(args)
всегда будет ссылочным типом, либо lvalue, либо rvalue. Вы, вероятно, хотите std::remove_reference_t
из этих типов. И вы также можете использовать std::remove_reference_t<Args>
для простоты написания.