Существуют ли какие-либо конкретные случаи, которые вы не можете правильно выполнить с std::conjunction
/ std::disjunction
и не используете более «фундаментальное» (то есть языковое, а не библиотечное) выражение сгиба для &&
/ ||
?
Пример:
// func is enabled if all Ts... have the same type
template<typename T, typename... Ts>
std::enable_if_t<std::conjunction_v<std::is_same<T, Ts>...> >
func(T, Ts...) {
// TODO something to show
}
против
// func is enabled if all Ts... have the same type
template<typename T, typename... Ts>
std::enable_if_t<(std::is_same<T, Ts> &&...)>
func(T, Ts...) {
// TODO something to show
}
Версия с использованием выражения сгиба является более краткой и, как правило, более читаемой (хотя мнения могут отличаться по этому вопросу). Поэтому я не понимаю, почему он был добавлен в библиотеку вместе с выражениями свертки.