Is a glvalue integral constant expression a constant expression?

耗尽温柔 提交于 2019-12-01 21:04:29

Is a an integral constant expression?

In the following contexts:

int b[a]{};
static_assert(a,"");
switch(1){
  case a:
    ;
}

yes, a is an integral constant expression. Starting with your first quote:

An integral constant expression is an expression of integral or unscoped enumeration type, implicitly converted to a prvalue, where the converted expression is a core constant expression.

'a' is an integral type, in your cases it will be implicitly converted to a prvalue, so now is a a core constant expression? Yes, if we go back to paragraph 2 which defines what is not a core constant expression:

A conditional-expression e is a core constant expression unless the evaluation of e, following the rules of the abstract machine (1.9), would evaluate one of the following expressions

it has the following clause:

an lvalue-to-rvalue conversion (4.1) unless it is applied to

with the following exception:

a non-volatile glvalue of integral or enumeration type that refers to a complete non-volatile const object with a preceding initialization, initialized with a constant expression, or

which applies to a since it is non-volatile, const and is initialized with a constant expression.


Is a a constant expression?

In the same contexts as above, yes, since we can see from the quote above it is a core constant expression.


Is a glvalue integral constant expression a constant expression?

No, in order for it to be a integral constant expression it must be converted to a prvalue and threfore can not be a glvalue.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!