2559. Error in LWG 2234's resolution

Section: 22.3 [assertions] Status: C++17 Submitter: Tim Song Opened: 2015-11-07 Last modified: 2017-07-30

Priority: 0

View other active issues in [assertions].

View all other issues in [assertions].

View all issues with C++17 status.

Discussion:

The resolution of LWG 2234 says that assert(E) is a constant subexpression if "NDEBUG is defined at the point where assert(E) appears".

This is incorrect, as noted in one of STL's comments in that issue's discussion, but was apparently overlooked.

The proposed resolution below just borrows STL's phrasing from the discussion.

[2016-02, Issues Telecon]

P0; move to Tentatively Ready.

Proposed resolution:

This wording is relative to N4567.

  1. Change 22.3 [assertions] p2 as indicated:

    An expression assert(E) is a constant subexpression (20.3.6 [defns.const.subexpr]), if

    • NDEBUG is defined at the point where assert(E) appearsassert is last defined or redefined, or

    • […]