Как использовать BOOST_STATIC_ASSERT с условием ИЛИ

Например у меня

BOOST_STATIC_ASSERT(
     boost::has_range_iterator<T>::value,
);

но у меня есть другие типы, которые находятся в диапазоне, что я могу обнаружить с

is_foo_type:: значение

Как мне объединить два в качестве дизъюнкции? то есть в psuedocode

BOOST_STATIC_ASSERT(
     std::or<
       boost::has_range_iterator<T>::value,
       is_foo_type<T>::value
     >::value
);

1 ответ

Решение

Начиная с C++17 вы можете использовать черту типа std::disjunction:

BOOST_STATIC_ASSERT(
     std::disjunction_v<
       boost::has_range_iterator<T>::value,
       is_foo_type<T>::value
     >
);

До C++17 вы должны использовать ||, как @StoryTeller упомянул:

BOOST_STATIC_ASSERT(boost::has_range_iterator<T>::value || is_foo_type<T>::value);
Другие вопросы по тегам