int a = 1, es a || 1 una expresión constante?
N4527 5.20 [expr.const] p5
Una expresión constante es una expresión constante del núcleo de valor de gl cuyo valor se refiere a una entidad que es un resultado permitido de una expresión constante (como se define a continuación), o una expresión constante del núcleo de valor cuyo valor es un objeto donde, para ese objeto y sus subobjetos :
- cada miembro de datos no estático de tipo de referencia se refiere a una entidad que es un resultado permitido de una expresión constante, y
- si el objeto o subobjeto es de tipo puntero, contiene la dirección de un objeto con una duración de almacenamiento estático, la dirección más allá del final de dicho objeto (5.7), la dirección de una función o un valor de puntero nulo.
Una entidad es un resultado permitido de una expresión constante si es un objeto con una duración de almacenamiento estático que no es un objeto temporal o es un objeto temporal cuyo valor satisface las restricciones anteriores, o es una función.
void foo(){
int a = 1;
int b[a || 1]{};//ok in gcc 5.1.0, error in clang 3.8.0
static_assert(a || 1,"");//ok in gcc 5.1.0, error in clang 3.8.0
switch(1){
case a || 1://ok in gcc 5.1.0, error in clang 3.8.0
;
}
}
Esa || 1
a expresión constante?
N4527 5.20 [expr.const] p2
Una expresión condicional e es una expresión constante central a menos que la evaluación de e, siguiendo las reglas de la máquina abstracta (1.9), evalúe una de las siguientes expresiones:
(2.7) - una conversión de valor de valor a valor de valor (4.1) a menos que se aplique a
(2.7.1) - un valor de gl no volátil de tipo integral o de enumeración que se refiere a un objeto const no volátil completo con una inicialización anterior, inicializado con una expresión constante, o
(2.7.2) - un valor gl no volátil que se refiere a un subobjeto de un literal de cadena (2.13.5), o
(2.7.3) - un valor gl no volátil que se refiere a un objeto no volátil definido con constexpr, o que se refiere a un sub-objeto no mutable de dicho objeto, o
(2.7.4) - un valor gl no volátil de tipo literal que se refiere a un objeto no volátil cuya vida útil comenzó dentro de la evaluación de e;
Esa || 1
a expresión constante central?