如何在 OR 条件下使用 BOOST_STATIC_ASSERT

How to use BOOST_STATIC_ASSERT with an OR condition

例如我有

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

但我还有其他类型的范围可以用

检测

is_foo_type::值

如何将两者结合起来作为析取。即在伪代码

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

因为 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);