【问题标题】:How to use BOOST_STATIC_ASSERT with an OR condition如何使用带有 OR 条件的 BOOST_STATIC_ASSERT
【发布时间】:2018-08-22 07:27:56
【问题描述】:

例如我有

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

【问题讨论】:

  • A::value || B::value 有什么问题?
  • 噢!显而易见的。我正在寻找一些太复杂的东西:) 谢谢

标签: c++ enable-if


【解决方案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);

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2011-04-12
    • 2021-04-30
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多