例如我有

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

最佳答案

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

08-26 19:29
查看更多