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