xref: /openbsd-src/gnu/llvm/libcxx/include/__fwd/string.h (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
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