为什么使用boost :: ice_or而不是||然后在enable_if中使用boost :: ice_and而不是&&?
-
28-10-2019 - |
题
正如问题所指出的那样,人们为什么有理由在正常条件下使用struct版本?
解决方案
积分常量表达式的增强编码指南的摘录:
不要在整数常量表达式中使用逻辑运算符;而是使用模板元编程。
标头包含许多变通办法模板,它们代替了:来满足逻辑运算符的作用。
INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2
使用:
::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value
理论上:许多编译器(尤其是Borland和Microsoft编译器)往往不将涉及逻辑运算符的整数常量表达式识别为真正的整数常量表达式。该问题通常仅在将整数常量表达式嵌套在模板代码内部很深的地方时出现,并且很难重现和诊断。
所以我说永远不要使用兼容的编译器。 (但是,如果需要支持不兼容的编译器,请使用它。)
不隶属于 StackOverflow