Pourquoi utiliser boost :: ice_or au lieu de || et boost :: ice_and au lieu de && dans activy_if?

StackOverflow https://stackoverflow.com/questions/5400385

Question

Comme l'indique la question, y a-t-il une raison pour laquelle les gens utilisent la version struct sur les conditions normales?

Était-ce utile?

La solution

Un extrait du Boost des directives de codage pour les expressions constantes intégrales:

N'utilisez pas les opérateurs logiques dans des expressions constantes intégrales; Utilisez plutôt la méta-programmation du modèle.

L'en-tête contient un certain nombre de modèles de solution de contournement, qui remplissent le rôle des opérateurs logiques, par exemple au lieu de:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

Utilisation:

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

Justification: Un certain nombre de compilateurs (en particulier les compilateurs Borland et Microsoft) ont tendance à ne pas reconnaître les expressions constantes intégrales impliquant des opérateurs logiques comme de véritables expressions constantes intégrales. Le problème n'apparaît généralement que lorsque l'expression constante intégrale est imbriquée profondément à l'intérieur du code du modèle et est difficile à reproduire et à diagnostiquer.

Je dirais donc jamais sur un compilateur conforme. (Mais si vous devez prendre en charge les compilateurs non conformes, utilisez-le.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top