CWG Issue 2129 (original) (raw)
This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-11-05
2129. Non-object prvalues and constant expressions
Section: 7.7 [expr.const]Status: CD4Submitter: Faisal ValiDate: 2015-05-20
[Adopted at the February, 2016 meeting.]
According to 7.7 [expr.const] paragraph 5,
A constant expression is either a glvalue core constant expression whose value... or a prvalue core constant expression whose value is an object where...
Since an integer literal is prvalue that is not an object, this definition does not allow it to be a constant expression.
Proposed resolution (February, 2016):
Change 7.7 [expr.const] paragraph 5 as follows:
A constant expression is either a glvalue core constant expression whose value refers to an entity that is a permitted result of a constant expression (as defined below), or a prvalue core constant expression whose value
is an object where, for that object and its subobjectssatisfies the following constraints:
- if the value is an object of class type, each non-static data member of reference type refers to an entity that is a permitted result of a constant expression,
and- if the
object or subobjectvalue is of pointer type, it contains the address of an object with static storage duration, the address past the end of such an object (7.6.6 [expr.add]), the address of a function, or a null pointer value., and- if the value is an object of class or array type, each subobject satisfies these constraints for the value.
An entity is a permitted result of a constant expression if...