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
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, if the 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...
is
an object where, for that object and its subobjects
satisfies the following constraints:
and
object or
subobject value 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
[Adopted at the February, 2016 meeting.] According to 7.7 [expr.const] paragraph 5, Since an integer literal is prvalue that is not an
object, this definition does not allow it to be a
constant expression.
A constant expression is either a glvalue core constant
expression whose value... or a prvalue core constant
expression whose value is an object where...