2011-03-23 28 views

Respuesta

9

Un extracto del Boost Coding Guidelines for Integral Constant Expressions:

No utilice los operadores lógicos en expresiones constantes integrales; use meta-programación de plantillas en su lugar.

La cabecera contiene una serie de plantillas de solución, que cumplen la función de los operadores lógicos, por ejemplo, en lugar de:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

Uso:

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

Justificación: Varios compiladores (en particular, los compiladores de Borland y Microsoft) tienden a no reconocer las expresiones constantes integrales que implican operadores lógicos como expresiones constantes integrales genuinas. Por lo general, el problema solo aparece cuando la expresión constante integral está anidada en el interior del código de la plantilla, y es difícil de reproducir y diagnosticar.

Así que yo diría que nunca en un compilador compatible. (Pero si necesita admitir compiladores no conformes, úselo.)

+0

"en particular los compiladores de ** ** ** y de Borland" ¡Oh ...! VS210 aquí. : | Gracias por proporcionar ese fragmento! – Xeo

+1

@Xeo: No hay problema. Es una pena que no enumeren los compiladores, pero realmente dudo que VC2010 lo necesite. – GManNickG

+3

@Xeo - Definitivamente significan VC6, que es notorio tanto por ser demasiado utilizado como por ser muy pre-estándar. VS2010 no tiene tales problemas. –

Cuestiones relacionadas