Pergunta

Como a pergunta afirma, há uma razão pela qual as pessoas usam a versão de struct sobre as condicionais normais?

Foi útil?

Solução

Um trecho das Boost Coding Guidelines for Integral Constant Expressions :

Não use operadores lógicos em expressões constantes integrais; em vez disso, use a meta-programação de modelo.

O cabeçalho contém vários modelos de solução alternativa, que cumprem a função de operadores lógicos, por exemplo, em vez de:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

Use:

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

Justificativa: vários compiladores (particularmente os compiladores Borland e Microsoft) tendem a não reconhecer expressões constantes integrais envolvendo operadores lógicos como expressões constantes integrais genuínas. O problema geralmente só aparece quando a expressão constante integral está aninhada no código do modelo e é difícil de reproduzir e diagnosticar.

Então, eu diria nunca em um compilador compatível. (Mas se você precisar oferecer suporte a compiladores não compatíveis, use-o.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top