GMa*_*ckG 9

摘要来自整数常量表达式Boost编码指南:

不要在整数常量表达式中使用逻辑运算符; 使用模板元编程代替.

标题包含许多变通模板,它们履行逻辑运算符的作用,例如代替:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

使用:

::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value

基本原理:许多编译器(特别是Borland和Microsoft编译器)倾向于不将逻辑运算符的整数常量表达式识别为真正的整数常量表达式.当积分常量表达式嵌套在模板代码深处并且难以重现和诊断时,问题通常只会出现.

所以我说永远不会在兼容的编译器上.(但如果您需要支持不合规的编译器,请使用它.)

  • @Xeo - 它们肯定意味着VC6,它因使用过于广泛而且非常标准化而臭名昭着.VS2010没有这样的问题. (3认同)