int a = 1, é um || 1 uma expressão constante?
N4527 5,20 [expr.const] p5
Uma expressão constante é uma expressão constante do núcleo glvalue cujo valor se refere a uma entidade que é um resultado permitido de uma expressão constante (conforme definido abaixo) ou uma expressão constante do núcleo prvalue cujo valor é um objeto em que, para esse objeto e seus subobjetos :
- cada membro de dados não estáticos do tipo de referência se refere a uma entidade que é um resultado permitido de uma expressão constante, e
- se o objeto ou subobjeto for do tipo ponteiro, ele conterá o endereço de um objeto com duração de armazenamento estático, o endereço após o final desse objeto (5.7), o endereço de uma função ou um valor de ponteiro nulo.
Uma entidade é um resultado permitido de uma expressão constante se for um objeto com duração de armazenamento estático que não é um objeto temporário ou é um objeto temporário cujo valor satisfaz as restrições acima, ou é uma função.
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
;
}
}
Éa || 1
a expressão constante?
N4527 5,20 [expr.const] p2
Uma expressão condicional e é uma expressão constante central, a menos que a avaliação de e, seguindo as regras da máquina abstrata (1.9), avalie uma das seguintes expressões:
(2.7) - uma conversão de valor em valor (4.1), a menos que seja aplicada a
(2.7.1) - um glvalue não volátil do tipo integral ou de enumeração que se refere a um objeto const não volátil completo com uma inicialização anterior, inicializado com uma expressão constante, ou
(2.7.2) - um glvalue não volátil que se refere a um subobjeto de uma cadeia de caracteres literal (2.13.5), ou
(2.7.3) - um valor de valor não volátil que se refere a um objeto não volátil definido com constexpr, ou que se refere a um subobjeto não mutável desse objeto, ou
(2.7.4) - um valor de valor não volátil do tipo literal que se refere a um objeto não volátil cuja vida útil começou na avaliação de e;
Éa || 1
a expressão constante do núcleo?