diff --git a/libcxx/include/__format/formatter_output.h b/libcxx/include/__format/formatter_output.h --- a/libcxx/include/__format/formatter_output.h +++ b/libcxx/include/__format/formatter_output.h @@ -373,10 +373,10 @@ # if _LIBCPP_STD_VER > 20 -struct __null_sentinel {}; +struct __nul_terminator {}; template -_LIBCPP_HIDE_FROM_ABI bool operator==(const _CharT* __cstr, __null_sentinel) { +_LIBCPP_HIDE_FROM_ABI bool operator==(const _CharT* __cstr, __nul_terminator) { return *__cstr == _CharT('\0'); } @@ -384,7 +384,7 @@ _LIBCPP_HIDE_FROM_ABI void __write_escaped_code_unit(basic_string<_CharT>& __str, char32_t __value, const _CharT* __prefix) { back_insert_iterator __out_it{__str}; - std::ranges::copy(__prefix, __null_sentinel{}, __out_it); + std::ranges::copy(__prefix, __nul_terminator{}, __out_it); char __buffer[8]; to_chars_result __r = std::to_chars(std::begin(__buffer), std::end(__buffer), __value, 16); diff --git a/libcxx/test/libcxx/nasty_macros.compile.pass.cpp b/libcxx/test/libcxx/nasty_macros.compile.pass.cpp --- a/libcxx/test/libcxx/nasty_macros.compile.pass.cpp +++ b/libcxx/test/libcxx/nasty_macros.compile.pass.cpp @@ -59,6 +59,11 @@ # undef _M #endif +// Test that libc++ doesn't use names that collide with FreeBSD system macros. +#ifndef __FreeBSD__ +# define __null_sentinel NASTY_MACRO +#endif + // tchar.h defines these macros on Windows #ifndef _WIN32 # define _UI NASTY_MACRO