int a = 1, является || 1 константное выражение?

N4527 5,20 [expr.const] p5

Константное выражение является либо основным выражением-константой glvalue, значение которого относится к объекту, который является разрешенным результатом постоянного выражения (как определено ниже), либо основным выражением-константой, значение которого является объектом где, для этого объекта и его подобъектов :

- каждый элемент нестатических данных ссылочного типа относится к объекту, который является разрешенным результатом постоянного выражения, и

- если объект или подобъект имеет тип указателя, он содержит адрес объекта со статической продолжительностью хранения, адрес после конца такого объекта (5.7), адрес функции или значение нулевого указателя.

Сущность - это разрешенный результат константного выражения, если это объект со статической продолжительностью хранения, который не является временным объектом или является временным объектом, значение которого удовлетворяет указанным выше ограничениям, или является функцией.

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 постоянное выражение?

N4527 5,20 [expr.const] p2

Условное выражение e является основным константным выражением, если при вычислении e, следуя правилам абстрактной машины (1.9), не будет выполнено одно из следующих выражений:

(2.7) - преобразование lvalue в rvalue (4.1), если оно не применяется к

(2.7.1) - энергонезависимое glvalue целочисленного или перечислимого типа, которое относится к полному энергонезависимому объекту const с предшествующей инициализацией, инициализированной с помощью константного выражения, или

(2.7.2) - энергонезависимое glvalue, которое ссылается на подобъект строкового литерала (2.13.5), или

(2.7.3) - энергонезависимое значение glvalue, которое относится к энергонезависимому объекту, определенному с помощью constexpr, или которое относится к неизменяемому подобъекту такого объекта, или

(2.7.4) - энергонезависимое glvalue литерального типа, которое относится к энергонезависимому объекту, время жизни которого началось в пределах оценки e;

Являетсяa || 1 a основное константное выражение?

Ответы на вопрос(3)

Ваш ответ на вопрос