2011-03-23 17 views

答えて

9

Boost Coding Guidelines for Integral Constant Expressionsからの抜粋:

整数定数式に論理演算子を使用しないでください。代わりにテンプレートのメタプログラミングを使用してください。

ヘッダは、例えば、論理演算子の役割を果たし、回避策テンプレートの数が含ま代わりに:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

使用:

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

理由:多くのコンパイラ(特にBorlandコンパイラとMicrosoftコンパイラ)は、論理演算子を含む整数定数式を本物の整数定数式として認識しない傾向があります。この問題は一般に、整数定数式がテンプレートコードの深くにネストされ、再現と診断が難しい場合にのみ表示されます。

私は決して準拠したコンパイラではないと言います。 (しかし、準拠していないコンパイラをサポートする必要がある場合は、それを使用してください)

+0

"特にBorlandと** Microsoft **コンパイラ" Oh sh ...!ここでVS210。 :|そのスニペットをお寄せいただきありがとうございます! – Xeo

+1

@ Xeo:問題ありません。彼らがコンパイラをリストアップしていないことは残念ですが、VC2010がそれを必要とするのは本当に疑問です。 – GManNickG

+3

@ Xeo - VC6はあまりにも広く使われていて、非常に標準的であることで有名です。 VS2010にはこのような問題はありません。 –

関連する問題