Существуют ли какие-либо конкретные случаи, которые вы не можете правильно сделать с помощью 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
}
Версия, использующая выражение сгиба, является более краткой и, как правило, более читаемой (хотя мнения могут отличаться по этому вопросу). Поэтому я не понимаю, почему он был добавлен в библиотеку вместе с выражениями свертки.