断言

在本教程的其余部分,您将看到使用不同类型的断言(如BOOST_HANA_RUNTIME_CHECKBOOST_HANA_CONSTANT_CHECK)的代码段。 像任何合理的assert宏,它们基本上检查它们给出的条件是否满足。 然而,在异构编程的上下文中,一些信息在编译时是已知的,而其他信息仅在运行时可知。 在上下文中使用的断言的确切类型告诉您所声明的条件是否可以在编译时可知,或者是否必须在运行时计算,这是非常宝贵的信息。 下面是教程中使用的不同类型的断言,以及它们的特殊的简述。 有关更多详细信息,参见对断言的引用

断言 说明
BOOST_HANA_RUNTIME_CHECK 在直到运行时才可知的条件上断言。这种断言提供了最弱的保证形式。
BOOST_HANA_CONSTEXPR_CHECK 如果在常量表达式中允许lambda,则在constexpr的条件上断言。换句话说,它不是一个static_assert的唯一原因是语言限制了lambda不能出现在常量表达式中,这个限制可能会在c++17中解除。
static_assert constexpr条件上断言。强度上大于BOOST_HANA_CONSTEXPR_CHECK,因为它要求条件是一个constexpr表达式,因此它保证了表达式中使用的算法是constexpr友好的。
BOOST_HANA_CONSTANT_CHECK 在一个布尔型IntegralConstant条件上断言。这种断言提供了最强的保证形式。因为IntegralConstant可以转换为constexpr值,即使它本身不是constexpr