*This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
Core Issues List revision 115a.
See http://www.open-std.org/jtc1/sc22/wg21/ for the official
list.*

2024-07-24

#### 299.
Conversion on array bound expression in `new`

**Section: **7.6.2.8 [expr.new]
**Status: **CD1
**Submitter: **Mark Mitchell
**Date: **19 Jul 2001

[Voted into WP at October 2005 meeting.]

In 7.6.2.8 [expr.new], the standard says that the
expression in an array-new has to
have integral type. There's already a DR (issue 74)
that says it should also be allowed to have enumeration type. But, it should
probably also say that it can have a class type with a single
conversion to integral type; in other words the same thing as in
8.5.3 [stmt.switch] paragraph 2.

**Suggested resolution:**

In 7.6.2.8 [expr.new] paragraph 6, replace
"integral or enumeration type (6.8.2 [basic.fundamental])" with
"integral or enumeration type (6.8.2 [basic.fundamental]), or a class
type for which a single conversion function to
integral or enumeration type exists".

**Proposed resolution (October, 2004):**

Change 7.6.2.8 [expr.new] paragraph 6 as
follows:

Every *constant-expression* in a
*direct-new-declarator* shall be an integral constant
expression (7.7 [expr.const]) and evaluate to a
strictly positive value. The *expression* in a
*direct-new-declarator* shall ~~have~~ be of
integral type, ~~or~~ enumeration type~~ (3.9.1)~~, or a
class type for which a single conversion function to integral or
enumeration type exists (11.4.8 [class.conv]). If the
expression is of class type, the expression is converted by
calling the conversion function, and the result of the conversion
is used in place of the original expression. The value of the
expression shall be~~with a~~ non-negative~~
value~~. [*Example:* ...

**Proposed resolution (April, 2005):**

Change 7.6.2.8 [expr.new] paragraph 6 as
follows:

Every *constant-expression* in a
*direct-new-declarator* shall be an integral constant
expression (7.7 [expr.const]) and evaluate to a
strictly positive value. The *expression* in a
*direct-new-declarator* shall ~~have integral or enumeration
type (6.8.2 [basic.fundamental]) with a non-negative
value~~ be of integral type, enumeration type, or a class type for
which a single conversion function to integral or enumeration type
exists (11.4.8 [class.conv]). If the expression is of class
type, the expression is converted by calling that conversion function,
and the result of the conversion is used in place of the original
expression. If the value of the expression is negative, the behavior
is undefined. [*Example:* ...