Missing incompatibility for &&
C.4.3 [diff.cpp03.expr]
Melissa Mears

Created on 2014-10-31.00:00:00 last changed 49 months ago


Date: 2015-10-15.00:00:00

[Moved to DR at the October, 2015 meeting.]

Date: 2015-05-15.00:00:00

Proposed resolution (May, 2015):

Add the following as a new subsection in C.4.3 [diff.cpp03.expr]:

7.6.15 [expr.log.or]
Change: && is valid in a type-name
Rationale: Required for new features
Effect on original feature: Valid C++ 2003 code may fail to compile or produce different results in this International Standard, as the following example illustrates:

  bool b1 = new int && false;           // previously false, now ill-formed
  struct S { operator int(); };
  bool b2 = &S::operator int && false;  // previously false, now ill-formed
Date: 2020-12-15.00:00:00

The introduction of rvalue references in C++11 changed the interpretation of some previously well-formed examples such as the following:

  struct Struct { template <typename T> operator T(); };
  bool example_1 = new int && false;               // #1
  bool example_2 = &Struct::operator int && false; // #2

Previously the && was interpreted as an operator, while it is now part of a type-name. However, this change is not mentioned in Annex Annex C [diff].

Date User Action Args
2017-02-06 00:00:00adminsetstatus: dr -> cd4
2015-11-10 00:00:00adminsetmessages: + msg6085
2015-11-10 00:00:00adminsetstatus: ready -> dr
2015-05-25 00:00:00adminsetmessages: + msg5470
2015-05-25 00:00:00adminsetstatus: drafting -> ready
2014-10-31 00:00:00admincreate