This page is a snapshot from the LWG issues list, see theLibrary Active Issues List for more information and the meaning ofCD1 status.
Section: 16.4.2.3[headers]Status:CD1Submitter: Steve ClamageOpened: 2004-06-03Last modified: 2016-01-28
Priority:Not Prioritized
View all otherissues in [headers].
View all issues withCD1 status.
Discussion:
C header <iso646.h> defines macros for some operators, such asnot_eq for !=.
Section 16.4.2.3[headers] "Headers" says that except as noted inclauses 18 through 27, the <cname> C++ header contents are the sameas the C header <name.h>. In particular, table 12 lists<ciso646> as a C++ header.
I don't find any other mention of <ciso646>, or any mention of<iso646.h>, in clauses 17 thorough 27. That implies that thecontents of <ciso646> are the same as C header <iso646.h>.
Annex C (informative, not normative) in [diff.header.iso646.h] C.2.2.2"Header <iso646.h>" says that the alternative tokens are notdefined as macros in <ciso646>, but does not mention the contentsof <iso646.h>.
I don't find any normative text to support C.2.2.2.
Proposed resolution:
Add to section 17.4.1.2 Headers [lib.headers] a new paragraph after paragraph 6 (the one about functions must be functions):
Identifiers that are keywords or operators in C++ shall not be definedas macros in C++ standard library headers. [Footnote:In particular, including the standard header <iso646.h>or <ciso646> has no effect.
[post-Redmond: Steve provided wording.]