如何在 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);
例如我有
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);