35#define _CHAR_TRAITS_H 1
37#pragma GCC system_header
45#ifdef _GLIBCXX_USE_WCHAR_T
49#if __cplusplus >= 201103L
51#if !defined __UINT_LEAST16_TYPE__ || !defined __UINT_LEAST32_TYPE__
55#if __cplusplus >= 202002L
60#ifndef _GLIBCXX_ALWAYS_INLINE
61# define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__))
64namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
66_GLIBCXX_BEGIN_NAMESPACE_VERSION
68#pragma GCC diagnostic push
69#pragma GCC diagnostic ignored "-Wstringop-overflow"
70#pragma GCC diagnostic ignored "-Wstringop-overread"
71#pragma GCC diagnostic ignored "-Warray-bounds"
83 template<
typename _CharT>
86 typedef unsigned long int_type;
90 typedef std::mbstate_t state_type;
110 template<
typename _CharT>
113 typedef _CharT char_type;
114 typedef typename _Char_types<_CharT>::int_type int_type;
117 typedef typename _Char_types<_CharT>::off_type off_type;
118 typedef typename _Char_types<_CharT>::state_type state_type;
120#if __cpp_lib_three_way_comparison
121 using comparison_category = std::strong_ordering;
124 static _GLIBCXX14_CONSTEXPR
void
125 assign(char_type& __c1,
const char_type& __c2)
127#if __cpp_constexpr_dynamic_alloc
128 if (std::__is_constant_evaluated())
129 std::construct_at(__builtin_addressof(__c1), __c2);
135 static _GLIBCXX_CONSTEXPR
bool
136 eq(
const char_type& __c1,
const char_type& __c2)
137 {
return __c1 == __c2; }
139 static _GLIBCXX_CONSTEXPR
bool
140 lt(
const char_type& __c1,
const char_type& __c2)
141 {
return __c1 < __c2; }
143 static _GLIBCXX14_CONSTEXPR
int
144 compare(
const char_type* __s1,
const char_type* __s2, std::size_t __n);
146 static _GLIBCXX14_CONSTEXPR std::size_t
147 length(
const char_type* __s);
149 static _GLIBCXX14_CONSTEXPR
const char_type*
150 find(
const char_type* __s, std::size_t __n,
const char_type& __a);
152 static _GLIBCXX20_CONSTEXPR char_type*
153 move(char_type* __s1,
const char_type* __s2, std::size_t __n);
155 static _GLIBCXX20_CONSTEXPR char_type*
156 copy(char_type* __s1,
const char_type* __s2, std::size_t __n);
158 static _GLIBCXX20_CONSTEXPR char_type*
159 assign(char_type* __s, std::size_t __n, char_type __a);
161 static _GLIBCXX_CONSTEXPR char_type
162 to_char_type(
const int_type& __c)
163 {
return static_cast<char_type
>(__c); }
165 static _GLIBCXX_CONSTEXPR int_type
166 to_int_type(
const char_type& __c)
167 {
return static_cast<int_type
>(__c); }
169 static _GLIBCXX_CONSTEXPR
bool
170 eq_int_type(
const int_type& __c1,
const int_type& __c2)
171 {
return __c1 == __c2; }
173#ifdef _GLIBCXX_STDIO_EOF
174 static _GLIBCXX_CONSTEXPR int_type
176 {
return static_cast<int_type
>(_GLIBCXX_STDIO_EOF); }
178 static _GLIBCXX_CONSTEXPR int_type
179 not_eof(
const int_type& __c)
180 {
return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
184 template<
typename _CharT>
185 _GLIBCXX14_CONSTEXPR
int
187 compare(
const char_type* __s1,
const char_type* __s2, std::size_t __n)
189 for (std::size_t __i = 0; __i < __n; ++__i)
190 if (lt(__s1[__i], __s2[__i]))
192 else if (lt(__s2[__i], __s1[__i]))
197 template<
typename _CharT>
198 _GLIBCXX14_CONSTEXPR std::size_t
199 char_traits<_CharT>::
200 length(
const char_type* __p)
203 while (!eq(__p[__i], char_type()))
208 template<
typename _CharT>
209 _GLIBCXX14_CONSTEXPR
const typename char_traits<_CharT>::char_type*
210 char_traits<_CharT>::
211 find(
const char_type* __s, std::size_t __n,
const char_type& __a)
213 for (std::size_t __i = 0; __i < __n; ++__i)
214 if (eq(__s[__i], __a))
219 template<
typename _CharT>
221 typename char_traits<_CharT>::char_type*
222 char_traits<_CharT>::
223 move(char_type* __s1,
const char_type* __s2, std::size_t __n)
227#if __cplusplus >= 202002L
228 if (std::__is_constant_evaluated())
231 if (__builtin_constant_p(__s2 < __s1)
232 && __s1 > __s2 && __s1 < (__s2 + __n))
237 assign(__s1[__n], __s2[__n]);
242 copy(__s1, __s2, __n);
246 __builtin_memmove(__s1, __s2, __n *
sizeof(char_type));
250 template<
typename _CharT>
252 typename char_traits<_CharT>::char_type*
253 char_traits<_CharT>::
254 copy(char_type* __s1,
const char_type* __s2, std::size_t __n)
258#if __cplusplus >= 202002L
259 if (std::__is_constant_evaluated())
261 for (std::size_t __i = 0; __i < __n; ++__i)
262 std::construct_at(__s1 + __i, __s2[__i]);
266 __builtin_memcpy(__s1, __s2, __n *
sizeof(char_type));
270 template<
typename _CharT>
272 typename char_traits<_CharT>::char_type*
273 char_traits<_CharT>::
274 assign(char_type* __s, std::size_t __n, char_type __a)
276#if __cplusplus >= 202002L
277 if (std::__is_constant_evaluated())
279 for (std::size_t __i = 0; __i < __n; ++__i)
280 std::construct_at(__s + __i, __a);
285 if _GLIBCXX17_CONSTEXPR (
sizeof(_CharT) == 1 && __is_trivial(_CharT))
290 __builtin_memcpy(&__c, __builtin_addressof(__a), 1);
291 __builtin_memset(__s, __c, __n);
296 for (std::size_t __i = 0; __i < __n; ++__i)
302_GLIBCXX_END_NAMESPACE_VERSION
305namespace std _GLIBCXX_VISIBILITY(default)
307_GLIBCXX_BEGIN_NAMESPACE_VERSION
322 template<
typename _CharT>
331 typedef char char_type;
332 typedef int int_type;
336 typedef mbstate_t state_type;
338#if __cpp_lib_three_way_comparison
339 using comparison_category = strong_ordering;
342 static _GLIBCXX17_CONSTEXPR
void
343 assign(char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
345#if __cpp_constexpr_dynamic_alloc
346 if (std::__is_constant_evaluated())
347 std::construct_at(__builtin_addressof(__c1), __c2);
353 static _GLIBCXX_CONSTEXPR
bool
354 eq(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
355 {
return __c1 == __c2; }
357 static _GLIBCXX_CONSTEXPR
bool
358 lt(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
361 return (
static_cast<unsigned char>(__c1)
362 <
static_cast<unsigned char>(__c2));
365 static _GLIBCXX17_CONSTEXPR
int
366 compare(
const char_type* __s1,
const char_type* __s2,
size_t __n)
370#if __cplusplus >= 201703L
371 if (std::__is_constant_evaluated())
373 for (
size_t __i = 0; __i < __n; ++__i)
374 if (lt(__s1[__i], __s2[__i]))
376 else if (lt(__s2[__i], __s1[__i]))
381 return __builtin_memcmp(__s1, __s2, __n);
384 static _GLIBCXX17_CONSTEXPR
size_t
385 length(
const char_type* __s)
387#if __cplusplus >= 201703L
388 if (std::__is_constant_evaluated())
391 return __builtin_strlen(__s);
394 static _GLIBCXX17_CONSTEXPR
const char_type*
395 find(
const char_type* __s,
size_t __n,
const char_type& __a)
399#if __cplusplus >= 201703L
400 if (std::__is_constant_evaluated())
403 return static_cast<const char_type*
>(__builtin_memchr(__s, __a, __n));
406 static _GLIBCXX20_CONSTEXPR char_type*
407 move(char_type* __s1,
const char_type* __s2,
size_t __n)
411#if __cplusplus >= 202002L
412 if (std::__is_constant_evaluated())
415 return static_cast<char_type*
>(__builtin_memmove(__s1, __s2, __n));
418 static _GLIBCXX20_CONSTEXPR char_type*
419 copy(char_type* __s1,
const char_type* __s2,
size_t __n)
423#if __cplusplus >= 202002L
424 if (std::__is_constant_evaluated())
427 return static_cast<char_type*
>(__builtin_memcpy(__s1, __s2, __n));
430 static _GLIBCXX20_CONSTEXPR char_type*
431 assign(char_type* __s,
size_t __n, char_type __a)
435#if __cplusplus >= 202002L
436 if (std::__is_constant_evaluated())
439 return static_cast<char_type*
>(__builtin_memset(__s, __a, __n));
442 static _GLIBCXX_CONSTEXPR char_type
443 to_char_type(
const int_type& __c) _GLIBCXX_NOEXCEPT
444 {
return static_cast<char_type
>(__c); }
448 static _GLIBCXX_CONSTEXPR int_type
449 to_int_type(
const char_type& __c) _GLIBCXX_NOEXCEPT
450 {
return static_cast<int_type
>(
static_cast<unsigned char>(__c)); }
452 static _GLIBCXX_CONSTEXPR
bool
453 eq_int_type(
const int_type& __c1,
const int_type& __c2) _GLIBCXX_NOEXCEPT
454 {
return __c1 == __c2; }
456#ifdef _GLIBCXX_STDIO_EOF
457 static _GLIBCXX_CONSTEXPR int_type
458 eof() _GLIBCXX_NOEXCEPT
459 {
return static_cast<int_type
>(_GLIBCXX_STDIO_EOF); }
461 static _GLIBCXX_CONSTEXPR int_type
462 not_eof(
const int_type& __c) _GLIBCXX_NOEXCEPT
463 {
return (__c == eof()) ? 0 : __c; }
468#ifdef _GLIBCXX_USE_WCHAR_T
473 typedef wchar_t char_type;
474 typedef wint_t int_type;
478 typedef mbstate_t state_type;
480#if __cpp_lib_three_way_comparison
481 using comparison_category = strong_ordering;
484 static _GLIBCXX17_CONSTEXPR
void
485 assign(char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
487#if __cpp_constexpr_dynamic_alloc
488 if (std::__is_constant_evaluated())
489 std::construct_at(__builtin_addressof(__c1), __c2);
495 static _GLIBCXX_CONSTEXPR
bool
496 eq(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
497 {
return __c1 == __c2; }
499 static _GLIBCXX_CONSTEXPR
bool
500 lt(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
501 {
return __c1 < __c2; }
503 static _GLIBCXX17_CONSTEXPR
int
504 compare(
const char_type* __s1,
const char_type* __s2,
size_t __n)
508#if __cplusplus >= 201703L
509 if (std::__is_constant_evaluated())
512 return wmemcmp(__s1, __s2, __n);
515 static _GLIBCXX17_CONSTEXPR
size_t
516 length(
const char_type* __s)
518#if __cplusplus >= 201703L
519 if (std::__is_constant_evaluated())
525 static _GLIBCXX17_CONSTEXPR
const char_type*
526 find(
const char_type* __s,
size_t __n,
const char_type& __a)
530#if __cplusplus >= 201703L
531 if (std::__is_constant_evaluated())
534 return wmemchr(__s, __a, __n);
537 static _GLIBCXX20_CONSTEXPR char_type*
538 move(char_type* __s1,
const char_type* __s2,
size_t __n)
542#if __cplusplus >= 202002L
543 if (std::__is_constant_evaluated())
546 return wmemmove(__s1, __s2, __n);
549 static _GLIBCXX20_CONSTEXPR char_type*
550 copy(char_type* __s1,
const char_type* __s2,
size_t __n)
554#if __cplusplus >= 202002L
555 if (std::__is_constant_evaluated())
558 return wmemcpy(__s1, __s2, __n);
561 static _GLIBCXX20_CONSTEXPR char_type*
562 assign(char_type* __s,
size_t __n, char_type __a)
566#if __cplusplus >= 202002L
567 if (std::__is_constant_evaluated())
570 return wmemset(__s, __a, __n);
573 static _GLIBCXX_CONSTEXPR char_type
574 to_char_type(
const int_type& __c) _GLIBCXX_NOEXCEPT
575 {
return char_type(__c); }
577 static _GLIBCXX_CONSTEXPR int_type
578 to_int_type(
const char_type& __c) _GLIBCXX_NOEXCEPT
579 {
return int_type(__c); }
581 static _GLIBCXX_CONSTEXPR
bool
582 eq_int_type(
const int_type& __c1,
const int_type& __c2) _GLIBCXX_NOEXCEPT
583 {
return __c1 == __c2; }
586 static _GLIBCXX_CONSTEXPR int_type
587 eof() _GLIBCXX_NOEXCEPT
588 {
return static_cast<int_type
>(WEOF); }
590 static _GLIBCXX_CONSTEXPR int_type
591 not_eof(
const int_type& __c) _GLIBCXX_NOEXCEPT
592 {
return eq_int_type(__c, eof()) ? 0 : __c; }
601#ifdef _GLIBCXX_USE_CHAR8_T
603 struct char_traits<char8_t>
605 typedef char8_t char_type;
606 typedef unsigned int int_type;
608 typedef u8streampos pos_type;
610 typedef mbstate_t state_type;
612#if __cpp_lib_three_way_comparison
613 using comparison_category = strong_ordering;
616 static _GLIBCXX17_CONSTEXPR
void
617 assign(char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
619#if __cpp_constexpr_dynamic_alloc
620 if (std::__is_constant_evaluated())
621 std::construct_at(__builtin_addressof(__c1), __c2);
627 static _GLIBCXX_CONSTEXPR
bool
628 eq(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
629 {
return __c1 == __c2; }
631 static _GLIBCXX_CONSTEXPR
bool
632 lt(
const char_type& __c1,
const char_type& __c2) _GLIBCXX_NOEXCEPT
633 {
return __c1 < __c2; }
635 static _GLIBCXX17_CONSTEXPR
int
636 compare(
const char_type* __s1,
const char_type* __s2,
size_t __n)
640#if __cplusplus >= 201703L
641 if (std::__is_constant_evaluated())
644 return __builtin_memcmp(__s1, __s2, __n);
647 static _GLIBCXX17_CONSTEXPR
size_t
648 length(
const char_type* __s)
650#if __cplusplus >= 201703L
651 if (std::__is_constant_evaluated())
654 return __builtin_strlen((
const char*)__s);
657 static _GLIBCXX17_CONSTEXPR
const char_type*
658 find(
const char_type* __s,
size_t __n,
const char_type& __a)
662#if __cplusplus >= 201703L
663 if (std::__is_constant_evaluated())
666 return static_cast<const char_type*
>(__builtin_memchr(__s, __a, __n));
669 static _GLIBCXX20_CONSTEXPR char_type*
670 move(char_type* __s1,
const char_type* __s2,
size_t __n)
674#if __cplusplus >= 202002L
675 if (std::__is_constant_evaluated())
678 return static_cast<char_type*
>(__builtin_memmove(__s1, __s2, __n));
681 static _GLIBCXX20_CONSTEXPR char_type*
682 copy(char_type* __s1,
const char_type* __s2,
size_t __n)
686#if __cplusplus >= 202002L
687 if (std::__is_constant_evaluated())
690 return static_cast<char_type*
>(__builtin_memcpy(__s1, __s2, __n));
693 static _GLIBCXX20_CONSTEXPR char_type*
694 assign(char_type* __s,
size_t __n, char_type __a)
698#if __cplusplus >= 202002L
699 if (std::__is_constant_evaluated())
702 return static_cast<char_type*
>(__builtin_memset(__s, __a, __n));
705 static _GLIBCXX_CONSTEXPR char_type
706 to_char_type(
const int_type& __c) _GLIBCXX_NOEXCEPT
707 {
return char_type(__c); }
709 static _GLIBCXX_CONSTEXPR int_type
710 to_int_type(
const char_type& __c) _GLIBCXX_NOEXCEPT
711 {
return int_type(__c); }
713 static _GLIBCXX_CONSTEXPR
bool
714 eq_int_type(
const int_type& __c1,
const int_type& __c2) _GLIBCXX_NOEXCEPT
715 {
return __c1 == __c2; }
718 static _GLIBCXX_CONSTEXPR int_type
719 eof() _GLIBCXX_NOEXCEPT
720 {
return static_cast<int_type
>(-1); }
722 static _GLIBCXX_CONSTEXPR int_type
723 not_eof(
const int_type& __c) _GLIBCXX_NOEXCEPT
724 {
return eq_int_type(__c, eof()) ? 0 : __c; }
729_GLIBCXX_END_NAMESPACE_VERSION
732#if __cplusplus >= 201103L
734namespace std _GLIBCXX_VISIBILITY(default)
736_GLIBCXX_BEGIN_NAMESPACE_VERSION
739 struct char_traits<char16_t>
741 typedef char16_t char_type;
742#ifdef __UINT_LEAST16_TYPE__
743 typedef __UINT_LEAST16_TYPE__ int_type;
745 typedef uint_least16_t int_type;
750 typedef mbstate_t state_type;
752#if __cpp_lib_three_way_comparison
753 using comparison_category = strong_ordering;
756 static _GLIBCXX17_CONSTEXPR
void
757 assign(char_type& __c1,
const char_type& __c2)
noexcept
759#if __cpp_constexpr_dynamic_alloc
760 if (std::__is_constant_evaluated())
761 std::construct_at(__builtin_addressof(__c1), __c2);
767 static constexpr bool
768 eq(
const char_type& __c1,
const char_type& __c2)
noexcept
769 {
return __c1 == __c2; }
771 static constexpr bool
772 lt(
const char_type& __c1,
const char_type& __c2)
noexcept
773 {
return __c1 < __c2; }
775 static _GLIBCXX17_CONSTEXPR
int
776 compare(
const char_type* __s1,
const char_type* __s2,
size_t __n)
778 for (
size_t __i = 0; __i < __n; ++__i)
779 if (lt(__s1[__i], __s2[__i]))
781 else if (lt(__s2[__i], __s1[__i]))
786 static _GLIBCXX17_CONSTEXPR
size_t
787 length(
const char_type* __s)
790 while (!eq(__s[__i], char_type()))
795 static _GLIBCXX17_CONSTEXPR
const char_type*
796 find(
const char_type* __s,
size_t __n,
const char_type& __a)
798 for (
size_t __i = 0; __i < __n; ++__i)
799 if (eq(__s[__i], __a))
804 static _GLIBCXX20_CONSTEXPR char_type*
805 move(char_type* __s1,
const char_type* __s2,
size_t __n)
809#if __cplusplus >= 202002L
810 if (std::__is_constant_evaluated())
813 return (
static_cast<char_type*
>
814 (__builtin_memmove(__s1, __s2, __n *
sizeof(char_type))));
817 static _GLIBCXX20_CONSTEXPR char_type*
818 copy(char_type* __s1,
const char_type* __s2,
size_t __n)
822#if __cplusplus >= 202002L
823 if (std::__is_constant_evaluated())
826 return (
static_cast<char_type*
>
827 (__builtin_memcpy(__s1, __s2, __n *
sizeof(char_type))));
830 static _GLIBCXX20_CONSTEXPR char_type*
831 assign(char_type* __s,
size_t __n, char_type __a)
833 for (
size_t __i = 0; __i < __n; ++__i)
834 assign(__s[__i], __a);
838 static constexpr char_type
839 to_char_type(
const int_type& __c)
noexcept
840 {
return char_type(__c); }
842 static constexpr bool
843 eq_int_type(
const int_type& __c1,
const int_type& __c2)
noexcept
844 {
return __c1 == __c2; }
847 static constexpr int_type
848 to_int_type(
const char_type& __c)
noexcept
849 {
return __c == eof() ? int_type(0xfffd) : int_type(__c); }
851 static constexpr int_type
853 {
return static_cast<int_type
>(-1); }
855 static constexpr int_type
856 not_eof(
const int_type& __c)
noexcept
857 {
return eq_int_type(__c, eof()) ? 0 : __c; }
859 static constexpr int_type
860 to_int_type(
const char_type& __c)
noexcept
861 {
return int_type(__c); }
866 struct char_traits<char32_t>
868 typedef char32_t char_type;
869#ifdef __UINT_LEAST32_TYPE__
870 typedef __UINT_LEAST32_TYPE__ int_type;
872 typedef uint_least32_t int_type;
877 typedef mbstate_t state_type;
879#if __cpp_lib_three_way_comparison
880 using comparison_category = strong_ordering;
883 static _GLIBCXX17_CONSTEXPR
void
884 assign(char_type& __c1,
const char_type& __c2)
noexcept
886#if __cpp_constexpr_dynamic_alloc
887 if (std::__is_constant_evaluated())
888 std::construct_at(__builtin_addressof(__c1), __c2);
894 static constexpr bool
895 eq(
const char_type& __c1,
const char_type& __c2)
noexcept
896 {
return __c1 == __c2; }
898 static constexpr bool
899 lt(
const char_type& __c1,
const char_type& __c2)
noexcept
900 {
return __c1 < __c2; }
902 static _GLIBCXX17_CONSTEXPR
int
903 compare(
const char_type* __s1,
const char_type* __s2,
size_t __n)
905 for (
size_t __i = 0; __i < __n; ++__i)
906 if (lt(__s1[__i], __s2[__i]))
908 else if (lt(__s2[__i], __s1[__i]))
913 static _GLIBCXX17_CONSTEXPR
size_t
914 length(
const char_type* __s)
917 while (!eq(__s[__i], char_type()))
922 static _GLIBCXX17_CONSTEXPR
const char_type*
923 find(
const char_type* __s,
size_t __n,
const char_type& __a)
925 for (
size_t __i = 0; __i < __n; ++__i)
926 if (eq(__s[__i], __a))
931 static _GLIBCXX20_CONSTEXPR char_type*
932 move(char_type* __s1,
const char_type* __s2,
size_t __n)
936#if __cplusplus >= 202002L
937 if (std::__is_constant_evaluated())
940 return (
static_cast<char_type*
>
941 (__builtin_memmove(__s1, __s2, __n *
sizeof(char_type))));
944 static _GLIBCXX20_CONSTEXPR char_type*
945 copy(char_type* __s1,
const char_type* __s2,
size_t __n)
949#if __cplusplus >= 202002L
950 if (std::__is_constant_evaluated())
953 return (
static_cast<char_type*
>
954 (__builtin_memcpy(__s1, __s2, __n *
sizeof(char_type))));
957 static _GLIBCXX20_CONSTEXPR char_type*
958 assign(char_type* __s,
size_t __n, char_type __a)
960 for (
size_t __i = 0; __i < __n; ++__i)
961 assign(__s[__i], __a);
965 static constexpr char_type
966 to_char_type(
const int_type& __c)
noexcept
967 {
return char_type(__c); }
969 static constexpr int_type
970 to_int_type(
const char_type& __c)
noexcept
971 {
return int_type(__c); }
973 static constexpr bool
974 eq_int_type(
const int_type& __c1,
const int_type& __c2)
noexcept
975 {
return __c1 == __c2; }
978 static constexpr int_type
980 {
return static_cast<int_type
>(-1); }
982 static constexpr int_type
983 not_eof(
const int_type& __c)
noexcept
984 {
return eq_int_type(__c, eof()) ? 0 : __c; }
988#if __cpp_lib_three_way_comparison
991 template<
typename _ChTraits>
993 __char_traits_cmp_cat(
int __cmp)
noexcept
995 if constexpr (
requires {
typename _ChTraits::comparison_category; })
997 using _Cat =
typename _ChTraits::comparison_category;
998 static_assert( !is_void_v<common_comparison_category_t<_Cat>> );
999 return static_cast<_Cat
>(__cmp <=> 0);
1002 return static_cast<weak_ordering
>(__cmp <=> 0);
1007#pragma GCC diagnostic pop
1009_GLIBCXX_END_NAMESPACE_VERSION
ISO C++ entities toplevel namespace is std.
fpos< mbstate_t > u32streampos
File position for char32_t streams.
long long streamoff
Type used by fpos, char_traits<char>, and char_traits<wchar_t>.
fpos< mbstate_t > u16streampos
File position for char16_t streams.
GNU extensions for public use.
Mapping from character type to associated types.
Base class used to implement std::char_traits.
Basis for explicit traits specializations.
Class representing stream positions.