[libc++] Add an option to disable wide character support in libc++
Some embedded platforms do not wish to support the C library functionality
for handling wchar_t because they have no use for it. It makes sense for
libc++ to work properly on those platforms, so this commit adds a carve-out
of functionality for wchar_t.
Unfortunately, unlike some other carve-outs (e.g. random device), this
patch touches several parts of the library. However, despite the wide
impact of this patch, I still think it is important to support this
configuration since it makes it much simpler to port libc++ to some
embedded platforms.
Differential Revision: https://reviews.llvm.org/D111265
NOKEYCHECK=True
GitOrigin-RevId: f4c1258d5633fcf06385ff3fd1f4bf57ab971964
diff --git a/include/__string b/include/__string
index a968fc0..1691b44 100644
--- a/include/__string
+++ b/include/__string
@@ -23,8 +23,12 @@
#include <cstdio> // for EOF
#include <cstdint> // for uint_least16_t
#include <cstring> // for memcpy
-#include <cwchar> // for wmemcpy
#include <type_traits> // for __libcpp_is_constant_evaluated
+#include <iosfwd> // for streampos & friends
+
+#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
+# include <cwchar> // for wmemcpy
+#endif
#include <__debug>
@@ -423,6 +427,7 @@
// char_traits<wchar_t>
+#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
template <>
struct _LIBCPP_TEMPLATE_VIS char_traits<wchar_t>
{
@@ -539,6 +544,7 @@
return nullptr;
#endif
}
+#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
template <class _Traits>
_LIBCPP_INLINE_VISIBILITY