1*4bdff4beSrobert //===----------------------------------------------------------------------===// 2*4bdff4beSrobert // 3*4bdff4beSrobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*4bdff4beSrobert // See https://llvm.org/LICENSE.txt for license information. 5*4bdff4beSrobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*4bdff4beSrobert // 7*4bdff4beSrobert //===----------------------------------------------------------------------===// 8*4bdff4beSrobert 9*4bdff4beSrobert #ifndef _LIBCPP___FWD_STRING_H 10*4bdff4beSrobert #define _LIBCPP___FWD_STRING_H 11*4bdff4beSrobert 12*4bdff4beSrobert #include <__config> 13*4bdff4beSrobert #include <__fwd/memory_resource.h> 14*4bdff4beSrobert 15*4bdff4beSrobert #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16*4bdff4beSrobert # pragma GCC system_header 17*4bdff4beSrobert #endif 18*4bdff4beSrobert 19*4bdff4beSrobert _LIBCPP_BEGIN_NAMESPACE_STD 20*4bdff4beSrobert 21*4bdff4beSrobert template <class _CharT> 22*4bdff4beSrobert struct _LIBCPP_TEMPLATE_VIS char_traits; 23*4bdff4beSrobert template <> 24*4bdff4beSrobert struct char_traits<char>; 25*4bdff4beSrobert 26*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_CHAR8_T 27*4bdff4beSrobert template <> 28*4bdff4beSrobert struct char_traits<char8_t>; 29*4bdff4beSrobert #endif 30*4bdff4beSrobert 31*4bdff4beSrobert template <> 32*4bdff4beSrobert struct char_traits<char16_t>; 33*4bdff4beSrobert template <> 34*4bdff4beSrobert struct char_traits<char32_t>; 35*4bdff4beSrobert 36*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 37*4bdff4beSrobert template <> 38*4bdff4beSrobert struct char_traits<wchar_t>; 39*4bdff4beSrobert #endif 40*4bdff4beSrobert 41*4bdff4beSrobert template <class _Tp> 42*4bdff4beSrobert class _LIBCPP_TEMPLATE_VIS allocator; 43*4bdff4beSrobert 44*4bdff4beSrobert template <class _CharT, class _Traits = char_traits<_CharT>, class _Allocator = allocator<_CharT> > 45*4bdff4beSrobert class _LIBCPP_TEMPLATE_VIS basic_string; 46*4bdff4beSrobert 47*4bdff4beSrobert using string = basic_string<char>; 48*4bdff4beSrobert 49*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 50*4bdff4beSrobert using wstring = basic_string<wchar_t>; 51*4bdff4beSrobert #endif 52*4bdff4beSrobert 53*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_CHAR8_T 54*4bdff4beSrobert using u8string = basic_string<char8_t>; 55*4bdff4beSrobert #endif 56*4bdff4beSrobert 57*4bdff4beSrobert using u16string = basic_string<char16_t>; 58*4bdff4beSrobert using u32string = basic_string<char32_t>; 59*4bdff4beSrobert 60*4bdff4beSrobert #if _LIBCPP_STD_VER >= 17 61*4bdff4beSrobert 62*4bdff4beSrobert namespace pmr { 63*4bdff4beSrobert template <class _CharT, class _Traits = char_traits<_CharT>> 64*4bdff4beSrobert using basic_string = std::basic_string<_CharT, _Traits, polymorphic_allocator<_CharT>>; 65*4bdff4beSrobert 66*4bdff4beSrobert using string = basic_string<char>; 67*4bdff4beSrobert 68*4bdff4beSrobert # ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 69*4bdff4beSrobert using wstring = basic_string<wchar_t>; 70*4bdff4beSrobert # endif 71*4bdff4beSrobert 72*4bdff4beSrobert # ifndef _LIBCPP_HAS_NO_CHAR8_T 73*4bdff4beSrobert using u8string = basic_string<char8_t>; 74*4bdff4beSrobert # endif 75*4bdff4beSrobert 76*4bdff4beSrobert using u16string = basic_string<char16_t>; 77*4bdff4beSrobert using u32string = basic_string<char32_t>; 78*4bdff4beSrobert 79*4bdff4beSrobert } // namespace pmr 80*4bdff4beSrobert 81*4bdff4beSrobert #endif // _LIBCPP_STD_VER >= 17 82*4bdff4beSrobert 83*4bdff4beSrobert // clang-format off 84*4bdff4beSrobert template <class _CharT, class _Traits, class _Allocator> 85*4bdff4beSrobert class _LIBCPP_PREFERRED_NAME(string) 86*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 87*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(wstring) 88*4bdff4beSrobert #endif 89*4bdff4beSrobert #ifndef _LIBCPP_HAS_NO_CHAR8_T 90*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(u8string) 91*4bdff4beSrobert #endif 92*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(u16string) 93*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(u32string) 94*4bdff4beSrobert #if _LIBCPP_STD_VER >= 17 95*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(pmr::string) 96*4bdff4beSrobert # ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 97*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(pmr::wstring) 98*4bdff4beSrobert # endif 99*4bdff4beSrobert # ifndef _LIBCPP_HAS_NO_CHAR8_T 100*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(pmr::u8string) 101*4bdff4beSrobert # endif 102*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(pmr::u16string) 103*4bdff4beSrobert _LIBCPP_PREFERRED_NAME(pmr::u32string) 104*4bdff4beSrobert #endif 105*4bdff4beSrobert basic_string; 106*4bdff4beSrobert // clang-format on 107*4bdff4beSrobert 108*4bdff4beSrobert _LIBCPP_END_NAMESPACE_STD 109*4bdff4beSrobert 110*4bdff4beSrobert #endif // _LIBCPP___FWD_STRING_H 111