如何在具有OR条件的情况下使用BOOST_STATIC_ASSERT

时间:2018-08-22 07:27:57

标签: c++ enable-if

例如我有

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

但是我还有其他可以检测到的范围

is_foo_type :: value

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

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

1 个答案:

答案 0 :(得分:2)

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