Created on 2013-09-20.00:00:00 last changed 94 months ago
[Moved to DR at the November, 2014 meeting.]
Proposed resolution (February, 2014):
Change 7.7 [expr.const] bullet 2.7 as follows:
A conditional-expression e is a core constant expression unless the evaluation of e, following the rules of the abstract machine (6.9.1 [intro.execution]), would evaluate one of the following expressions:
...
an lvalue-to-rvalue conversion (7.3.2 [conv.lval]) unless it is applied to
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
[Note: a string literal (5.13.5 [lex.string]) corresponds to an array of such objects. —end note], ora non-volatile glvalue that refers to a subobject of a string literal (5.13.5 [lex.string]), or
a non-volatile glvalue that refers to a non-volatile object defined with constexpr...
The requirements for a constant expression in 7.7 [expr.const] permit an lvalue-to-rvalue conversion on
a non-volatile glvalue of integral or enumeration type that refers to a non-volatile const object with a preceding initialization, initialized with a constant expression
This does not exclude subobjects of objects that are not compile-time constants, for example:
int f(); struct S { S() : a(f()), b(5) {} int a, b; }; const S s; constexpr int k = s.b;
This rule is intended to provide backward compatibility with pre-constexpr C++, but it should be restricted to complete objects. Care should be taken in resolving this issue not to break the handling of string literals, since use of their elements in constant expressions depends on the current form of this rule.
History | |||
---|---|---|---|
Date | User | Action | Args |
2017-02-06 00:00:00 | admin | set | status: drwp -> cd4 |
2015-05-25 00:00:00 | admin | set | status: dr -> drwp |
2015-04-13 00:00:00 | admin | set | messages: + msg5353 |
2014-11-24 00:00:00 | admin | set | status: ready -> dr |
2014-03-03 00:00:00 | admin | set | messages: + msg4816 |
2014-03-03 00:00:00 | admin | set | status: open -> ready |
2013-09-20 00:00:00 | admin | create |