[diff.mods.to.definitions] # Annex C (informative) Compatibility [[diff]](./#diff) ## C.8 C standard library [[diff.library]](diff.library#diff.mods.to.definitions) ### C.8.3 Modifications to definitions [diff.mods.to.definitions] #### [C.8.3.1](#diff.char16) Types char8_t, char16_t, and char32_t [[diff.char16]](diff.char16) [1](#diff.char16-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L3711) The types char8_t, char16_t, and char32_t are distinct types rather than typedefs to existing integral types[.](#diff.char16-1.sentence-1) The tokens char8_t, char16_t, and char32_t are keywords in C++ ([[lex.key]](lex.key "5.12 Keywords"))[.](#diff.char16-1.sentence-2) They do not appear as macro or type names defined in[](cuchar.syn#header:%3ccuchar%3e "28.7.4 Header synopsis [cuchar.syn]")[.](#diff.char16-1.sentence-3) #### [C.8.3.2](#diff.wchar.t) Type wchar_t [[diff.wchar.t]](diff.wchar.t) [1](#diff.wchar.t-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L3721) The type wchar_t is a distinct type rather than a typedef to an existing integral type[.](#diff.wchar.t-1.sentence-1) The token wchar_t is a keyword in C++ ([[lex.key]](lex.key "5.12 Keywords"))[.](#diff.wchar.t-1.sentence-2) It does not appear as a macro or type name defined in any of[](cstddef.syn#header:%3ccstddef%3e "17.2.1 Header synopsis [cstddef.syn]"),[](cstdlib.syn#header:%3ccstdlib%3e "17.2.2 Header synopsis [cstdlib.syn]"), or [](cwchar.syn#header:%3ccwchar%3e "28.7.3 Header synopsis [cwchar.syn]")[.](#diff.wchar.t-1.sentence-3) #### [C.8.3.3](#diff.header.iso646.h) Header [[diff.header.iso646.h]](diff.header.iso646.h) [1](#diff.header.iso646.h-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L3733) The tokensand,and_eq,bitand,bitor,compl,not,not_eq,or,or_eq,xor, andxor_eq are keywords in C++ ([[lex.key]](lex.key "5.12 Keywords")), and are not introduced as macros by [](iso646.h.syn#header:%3ciso646.h%3e "17.15.3 Header synopsis [iso646.h.syn]")[.](#diff.header.iso646.h-1.sentence-1) #### [C.8.3.4](#diff.null) Macro NULL [[diff.null]](diff.null) [1](#diff.null-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L3753) The macroNULL, defined in any of[](clocale.syn#header:%3cclocale%3e "28.3.5.1 Header synopsis [clocale.syn]"),[](cstddef.syn#header:%3ccstddef%3e "17.2.1 Header synopsis [cstddef.syn]"),[](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header synopsis [cstdio.syn]"),[](cstdlib.syn#header:%3ccstdlib%3e "17.2.2 Header synopsis [cstdlib.syn]"),[](cstring.syn#header:%3ccstring%3e "27.5.1 Header synopsis [cstring.syn]"),[](ctime.syn#header:%3cctime%3e "30.15 Header synopsis [ctime.syn]"), or [](cwchar.syn#header:%3ccwchar%3e "28.7.3 Header synopsis [cwchar.syn]"), is an implementation-defined null pointer constant in C++ ([[support.types]](support.types "17.2 Common definitions"))[.](#diff.null-1.sentence-1)