||の代わりにboost :: Ice_orを使用する理由boost :: Ice_and in && in enable_if?
-
28-10-2019 - |
質問
質問にあるように、通常の条件文ではなく構造体バージョンを使用する理由はありますか?
解決
からの抜粋 整数定数式のブーストコーディングガイドライン:
整数定数式では論理演算子を使用しないでください。代わりにテンプレートのメタプログラミングを使用してください。
ヘッダーには、たとえば次の代わりに論理演算子の役割を果たす多数の回避策テンプレートが含まれています。
INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2
使用:
::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value
理論的根拠:多くのコンパイラ (特に Borland および Microsoft コンパイラ) は、論理演算子を含む整数定数式を真の整数定数式として認識しない傾向があります。この問題は通常、整数定数式がテンプレート コードの奥深くにネストされている場合にのみ発生し、再現と診断が困難です。
したがって、準拠したコンパイラでは決して使用しないでください。(ただし、非準拠のコンパイラをサポートする必要がある場合は、それを使用してください。)
所属していません StackOverflow