[diff.cpp23.lex]

# Annex C (informative) Compatibility [[diff]](./#diff)

## C.1 C++ and ISO C++ 2023 [[diff.cpp23]](diff.cpp23#lex)

### C.1.2 [[lex]](lex "5 Lexical conventions"): lexical conventions [diff.cpp23.lex]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L16)

**Affected subclause:** [[lex.operators]](lex.operators)  


**Change:** New operator ^^[.](#1.sentence-1)

  


**Rationale:** Required for new features[.](#1.sentence-2)

  


**Effect on original feature:** Valid C++ 2023 code that contains two consecutive ^ tokens
can be ill-formed in this revision of C++[.](#1.sentence-3)

[*Example [1](#example-1)*: struct C { int operator^(int); };int operator^(int (C::*p)(int), C);int i = &C::operator^^C{}; // ill-formed; previously well-formed â *end example*]

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L32)

**Affected subclause:** [[lex.key]](lex.key)  


**Change:** New keywords[.](#2.sentence-1)

  


**Rationale:** Required for new features[.](#2.sentence-2)

- [(2.1)](#2.1)

The contract_assert keyword
is added to introduce a contract assertion
through an [*assertion-statement*](stmt.contract.assert#nt:assertion-statement "8.9 Assertion statement [stmt.contract.assert]") ([[stmt.contract.assert]](stmt.contract.assert "8.9 Assertion statement")).

  


**Effect on original feature:** Valid C++ 2023 code using contract_assert as an identifier
is not valid in this revision of C++[.](#2.sentence-3)
