Является ли выражение с интегральной константой glvalue константным выражением?
N4527 5,20 [expr.const] p3
интегральное постоянное выражение является выражением целочисленного или незаданного типа перечисления, неявно преобразованного в значение типа prvalue, где преобразованное выражение является выражением основной константы.
5.20 [expr.const] p5
A постоянное выражение является либо базовым константным выражением glvalue, значение которого относится к объекту, который является разрешенным результатом постоянного выражения (как определено ниже), либо базовым константным выражением prvalue, значение которого является объектом where для этого объекта и его подобъектов:
(5.1) - каждый нестатический элемент данных ссылочного типа относится к объекту, который является разрешенным результатом константного выражения, и
(5.2) - если объект или подобъект имеет тип указателя, он содержит адрес объекта со статической продолжительностью хранения, адрес после окончания такого объекта (5.7), адрес функции или значение нулевого указателя ,
Сущность является разрешенным результатом константного выражения, если это объект сстатическая продолжительность хранения это либо не временный объект, либо временный объект, значение которого удовлетворяет вышеуказанным ограничениям, либо это функция.
void foo(){
const int a = 1;//a has automatic storage duration
// all ok in gcc 5.1.0 and clang 3.8.0
int b[a]{};
static_assert(a,"");
switch(1){
case a:
;
}
}
Вопрос1: естьa
интегральное постоянное выражение?
Вопрос2: естьa
a постоянное выражение?
Вопрос 3: Является ли целочисленное константное выражение glvalue константным выражением?
Вопрос4:
Если ответ на вопрос 3 положительный, противоречит ли это 5,20 p3, если объект имеет длительность автоматического хранения?