xref: /freebsd-src/contrib/llvm-project/libcxx/include/__fwd/string.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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