質問

質問にあるように、通常の条件文ではなく構造体バージョンを使用する理由はありますか?

役に立ちましたか?

解決

からの抜粋 整数定数式のブーストコーディングガイドライン:

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

ヘッダーには、たとえば次の代わりに論理演算子の役割を果たす多数の回避策テンプレートが含まれています。

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

使用:

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

理論的根拠:多くのコンパイラ (特に Borland および Microsoft コンパイラ) は、論理演算子を含む整数定数式を真の整数定数式として認識しない傾向があります。この問題は通常、整数定数式がテンプレート コードの奥深くにネストされている場合にのみ発生し、再現と診断が困難です。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top