A partir del estándar ISO C++ de 2003, esa no es una expresión de constante integral . Citando la sección 5.19 de la norma:
An integral constant-expression can involve only literals (2.13), enumerators, const
variables or static data members of integral or enumeration types initialized with constant expressions (8.5), non-type tem-plate parameters of integral or enumeration types, and sizeof
expressions. Floating literals (2.13.3) can appear only if they are cast to integral or enumeration types.
puede cambiar este nombre:
const double rotationStep = 0.001;
const int N = 2*int(M_PI/rotationStep) + 3;
a esto:
const int inverseRotationStep = 1000;
const int N = 2*int(M_PI)*inverseRotationStep + 3;
(Eso suponiendo M_PI
se define en alguna parte; no se especifica en la norma , pero es una extensión común.)
El loo ISO 2011 estándar de ISO siente esto un poco. 5.19p3 (citando el proyecto N3337) dice:
An integral constant expression is a literal constant expression of integral or unscoped enumeration type.
Yo creo 2*int(M_PI/rotationStep) + 3
, y por lo tanto N
, califica bajo las nuevas reglas, pero es probable que su compilador todavía no ponerlas en práctica.
Por favor, ¿puedes borrar el símbolo 'static' de tu código y recompilarlo? – higuaro
@ h3nr1x: Es un comportamiento definido por la implementación (cuando se evalúa la expresión). –
no se compilará sin la palabra clave estática – user765269