Annex C (informative) Compatibility [diff]

C.1 C++ and ISO C++ 2017 [diff.cpp17]

C.1.9 [library]: library introduction [diff.cpp17.library]

Affected subclause: [headers]
Change: New headers.

Rationale: New functionality.

Effect on original feature: The following C++ headers are new: <barrier> ([barrier.syn]), <bit> ([bit.syn]), <charconv> ([charconv.syn]), <compare> ([compare.syn]), <concepts> ([concepts.syn]), <coroutine> ([coroutine.syn]), <format> ([format.syn]), <latch> ([latch.syn]), <numbers> ([numbers.syn]), <ranges> ([ranges.syn]), <semaphore> ([semaphore.syn]), <source_­location> ([source.location.syn]), <span> ([span.syn]), <stop_­token> ([thread.stoptoken.syn]), <syncstream> ([syncstream.syn]), and <version> ([support.limits.general]).
Valid C++ 2017 code that #includes headers with these names may be invalid in this International Standard.
Affected subclause: [headers]
Change: Remove vacuous C++ header files.

Rationale: The empty headers implied a false requirement to achieve C compatibility with the C++ headers.

Effect on original feature: A valid C++ 2017 program that #includes any of the following headers may fail to compile: <ccomplex>, <ciso646>, <cstdalign>, <cstdbool>, and <ctgmath>.
To retain the same behavior:
  • a #include of <ccomplex> can be replaced by a #include of <complex> ([complex.syn]),
  • a #include of <ctgmath> can be replaced by a #include of <cmath> ([cmath.syn]) and a #include of <complex>, and
  • a #include of <ciso646>, <cstdalign>, or <cstdbool> can simply be removed.