xref: /freebsd/contrib/llvm-project/libcxx/include/codecvt (revision ec0ea6efa1ad229d75c394c1a9b9cac33af2b1d3)
1// -*- C++ -*-
2//===-------------------------- codecvt -----------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef _LIBCPP_CODECVT
11#define _LIBCPP_CODECVT
12
13/*
14    codecvt synopsis
15
16namespace std
17{
18
19enum codecvt_mode
20{
21    consume_header = 4,
22    generate_header = 2,
23    little_endian = 1
24};
25
26template <class Elem, unsigned long Maxcode = 0x10ffff,
27          codecvt_mode Mode = (codecvt_mode)0>
28class codecvt_utf8
29    : public codecvt<Elem, char, mbstate_t>
30{
31    explicit codecvt_utf8(size_t refs = 0);
32    ~codecvt_utf8();
33};
34
35template <class Elem, unsigned long Maxcode = 0x10ffff,
36          codecvt_mode Mode = (codecvt_mode)0>
37class codecvt_utf16
38    : public codecvt<Elem, char, mbstate_t>
39{
40    explicit codecvt_utf16(size_t refs = 0);
41    ~codecvt_utf16();
42};
43
44template <class Elem, unsigned long Maxcode = 0x10ffff,
45          codecvt_mode Mode = (codecvt_mode)0>
46class codecvt_utf8_utf16
47    : public codecvt<Elem, char, mbstate_t>
48{
49    explicit codecvt_utf8_utf16(size_t refs = 0);
50    ~codecvt_utf8_utf16();
51};
52
53}  // std
54
55*/
56
57#include <__config>
58#include <__locale>
59
60#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
61#pragma GCC system_header
62#endif
63
64_LIBCPP_BEGIN_NAMESPACE_STD
65
66enum codecvt_mode
67{
68    consume_header = 4,
69    generate_header = 2,
70    little_endian = 1
71};
72
73// codecvt_utf8
74
75template <class _Elem> class __codecvt_utf8;
76
77template <>
78class _LIBCPP_TYPE_VIS __codecvt_utf8<wchar_t>
79    : public codecvt<wchar_t, char, mbstate_t>
80{
81    unsigned long _Maxcode_;
82    codecvt_mode _Mode_;
83public:
84    typedef wchar_t   intern_type;
85    typedef char      extern_type;
86    typedef mbstate_t state_type;
87
88    _LIBCPP_INLINE_VISIBILITY
89    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
90                            codecvt_mode _Mode)
91        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
92          _Mode_(_Mode) {}
93protected:
94    virtual result
95        do_out(state_type& __st,
96               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
97               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
98    virtual result
99        do_in(state_type& __st,
100              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
101              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
102    virtual result
103        do_unshift(state_type& __st,
104                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
105    virtual int do_encoding() const _NOEXCEPT;
106    virtual bool do_always_noconv() const _NOEXCEPT;
107    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
108                          size_t __mx) const;
109    virtual int do_max_length() const _NOEXCEPT;
110};
111
112_LIBCPP_SUPPRESS_DEPRECATED_PUSH
113template <>
114class _LIBCPP_TYPE_VIS __codecvt_utf8<char16_t>
115    : public codecvt<char16_t, char, mbstate_t>
116{
117    unsigned long _Maxcode_;
118    codecvt_mode _Mode_;
119public:
120    typedef char16_t  intern_type;
121    typedef char      extern_type;
122    typedef mbstate_t state_type;
123
124    _LIBCPP_INLINE_VISIBILITY
125    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
126                            codecvt_mode _Mode)
127        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
128          _Mode_(_Mode) {}
129_LIBCPP_SUPPRESS_DEPRECATED_POP
130
131protected:
132    virtual result
133        do_out(state_type& __st,
134               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
135               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
136    virtual result
137        do_in(state_type& __st,
138              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
139              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
140    virtual result
141        do_unshift(state_type& __st,
142                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
143    virtual int do_encoding() const _NOEXCEPT;
144    virtual bool do_always_noconv() const _NOEXCEPT;
145    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
146                          size_t __mx) const;
147    virtual int do_max_length() const _NOEXCEPT;
148};
149
150_LIBCPP_SUPPRESS_DEPRECATED_PUSH
151template <>
152class _LIBCPP_TYPE_VIS __codecvt_utf8<char32_t>
153    : public codecvt<char32_t, char, mbstate_t>
154{
155    unsigned long _Maxcode_;
156    codecvt_mode _Mode_;
157public:
158    typedef char32_t  intern_type;
159    typedef char      extern_type;
160    typedef mbstate_t state_type;
161
162    _LIBCPP_INLINE_VISIBILITY
163    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
164                            codecvt_mode _Mode)
165        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
166          _Mode_(_Mode) {}
167_LIBCPP_SUPPRESS_DEPRECATED_POP
168
169protected:
170    virtual result
171        do_out(state_type& __st,
172               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
173               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
174    virtual result
175        do_in(state_type& __st,
176              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
177              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
178    virtual result
179        do_unshift(state_type& __st,
180                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
181    virtual int do_encoding() const _NOEXCEPT;
182    virtual bool do_always_noconv() const _NOEXCEPT;
183    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
184                          size_t __mx) const;
185    virtual int do_max_length() const _NOEXCEPT;
186};
187
188template <class _Elem, unsigned long _Maxcode = 0x10ffff,
189          codecvt_mode _Mode = (codecvt_mode)0>
190class _LIBCPP_TEMPLATE_VIS codecvt_utf8
191    : public __codecvt_utf8<_Elem>
192{
193public:
194    _LIBCPP_INLINE_VISIBILITY
195    explicit codecvt_utf8(size_t __refs = 0)
196        : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
197
198    _LIBCPP_INLINE_VISIBILITY
199    ~codecvt_utf8() {}
200};
201
202// codecvt_utf16
203
204template <class _Elem, bool _LittleEndian> class __codecvt_utf16;
205
206template <>
207class _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, false>
208    : public codecvt<wchar_t, char, mbstate_t>
209{
210    unsigned long _Maxcode_;
211    codecvt_mode _Mode_;
212public:
213    typedef wchar_t   intern_type;
214    typedef char      extern_type;
215    typedef mbstate_t state_type;
216
217    _LIBCPP_INLINE_VISIBILITY
218    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
219                            codecvt_mode _Mode)
220        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
221          _Mode_(_Mode) {}
222protected:
223    virtual result
224        do_out(state_type& __st,
225               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
226               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
227    virtual result
228        do_in(state_type& __st,
229              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
230              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
231    virtual result
232        do_unshift(state_type& __st,
233                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
234    virtual int do_encoding() const _NOEXCEPT;
235    virtual bool do_always_noconv() const _NOEXCEPT;
236    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
237                          size_t __mx) const;
238    virtual int do_max_length() const _NOEXCEPT;
239};
240
241template <>
242class _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, true>
243    : public codecvt<wchar_t, char, mbstate_t>
244{
245    unsigned long _Maxcode_;
246    codecvt_mode _Mode_;
247public:
248    typedef wchar_t   intern_type;
249    typedef char      extern_type;
250    typedef mbstate_t state_type;
251
252    _LIBCPP_INLINE_VISIBILITY
253    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
254                            codecvt_mode _Mode)
255        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
256          _Mode_(_Mode) {}
257protected:
258    virtual result
259        do_out(state_type& __st,
260               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
261               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
262    virtual result
263        do_in(state_type& __st,
264              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
265              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
266    virtual result
267        do_unshift(state_type& __st,
268                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
269    virtual int do_encoding() const _NOEXCEPT;
270    virtual bool do_always_noconv() const _NOEXCEPT;
271    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
272                          size_t __mx) const;
273    virtual int do_max_length() const _NOEXCEPT;
274};
275
276_LIBCPP_SUPPRESS_DEPRECATED_PUSH
277template <>
278class _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, false>
279    : public codecvt<char16_t, char, mbstate_t>
280{
281    unsigned long _Maxcode_;
282    codecvt_mode _Mode_;
283public:
284    typedef char16_t  intern_type;
285    typedef char      extern_type;
286    typedef mbstate_t state_type;
287
288    _LIBCPP_INLINE_VISIBILITY
289    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
290                            codecvt_mode _Mode)
291        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
292          _Mode_(_Mode) {}
293_LIBCPP_SUPPRESS_DEPRECATED_POP
294
295protected:
296    virtual result
297        do_out(state_type& __st,
298               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
299               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
300    virtual result
301        do_in(state_type& __st,
302              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
303              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
304    virtual result
305        do_unshift(state_type& __st,
306                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
307    virtual int do_encoding() const _NOEXCEPT;
308    virtual bool do_always_noconv() const _NOEXCEPT;
309    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
310                          size_t __mx) const;
311    virtual int do_max_length() const _NOEXCEPT;
312};
313
314_LIBCPP_SUPPRESS_DEPRECATED_PUSH
315template <>
316class _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, true>
317    : public codecvt<char16_t, char, mbstate_t>
318{
319    unsigned long _Maxcode_;
320    codecvt_mode _Mode_;
321public:
322    typedef char16_t  intern_type;
323    typedef char      extern_type;
324    typedef mbstate_t state_type;
325
326    _LIBCPP_INLINE_VISIBILITY
327    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
328                            codecvt_mode _Mode)
329        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
330          _Mode_(_Mode) {}
331_LIBCPP_SUPPRESS_DEPRECATED_POP
332
333protected:
334    virtual result
335        do_out(state_type& __st,
336               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
337               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
338    virtual result
339        do_in(state_type& __st,
340              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
341              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
342    virtual result
343        do_unshift(state_type& __st,
344                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
345    virtual int do_encoding() const _NOEXCEPT;
346    virtual bool do_always_noconv() const _NOEXCEPT;
347    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
348                          size_t __mx) const;
349    virtual int do_max_length() const _NOEXCEPT;
350};
351
352_LIBCPP_SUPPRESS_DEPRECATED_PUSH
353template <>
354class _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, false>
355    : public codecvt<char32_t, char, mbstate_t>
356{
357    unsigned long _Maxcode_;
358    codecvt_mode _Mode_;
359public:
360    typedef char32_t  intern_type;
361    typedef char      extern_type;
362    typedef mbstate_t state_type;
363
364    _LIBCPP_INLINE_VISIBILITY
365    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
366                            codecvt_mode _Mode)
367        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
368          _Mode_(_Mode) {}
369_LIBCPP_SUPPRESS_DEPRECATED_POP
370
371protected:
372    virtual result
373        do_out(state_type& __st,
374               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
375               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
376    virtual result
377        do_in(state_type& __st,
378              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
379              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
380    virtual result
381        do_unshift(state_type& __st,
382                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
383    virtual int do_encoding() const _NOEXCEPT;
384    virtual bool do_always_noconv() const _NOEXCEPT;
385    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
386                          size_t __mx) const;
387    virtual int do_max_length() const _NOEXCEPT;
388};
389
390_LIBCPP_SUPPRESS_DEPRECATED_PUSH
391template <>
392class _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, true>
393    : public codecvt<char32_t, char, mbstate_t>
394{
395    unsigned long _Maxcode_;
396    codecvt_mode _Mode_;
397public:
398    typedef char32_t  intern_type;
399    typedef char      extern_type;
400    typedef mbstate_t state_type;
401
402    _LIBCPP_INLINE_VISIBILITY
403    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
404                            codecvt_mode _Mode)
405        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
406          _Mode_(_Mode) {}
407_LIBCPP_SUPPRESS_DEPRECATED_POP
408
409protected:
410    virtual result
411        do_out(state_type& __st,
412               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
413               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
414    virtual result
415        do_in(state_type& __st,
416              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
417              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
418    virtual result
419        do_unshift(state_type& __st,
420                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
421    virtual int do_encoding() const _NOEXCEPT;
422    virtual bool do_always_noconv() const _NOEXCEPT;
423    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
424                          size_t __mx) const;
425    virtual int do_max_length() const _NOEXCEPT;
426};
427
428template <class _Elem, unsigned long _Maxcode = 0x10ffff,
429          codecvt_mode _Mode = (codecvt_mode)0>
430class _LIBCPP_TEMPLATE_VIS codecvt_utf16
431    : public __codecvt_utf16<_Elem, _Mode & little_endian>
432{
433public:
434    _LIBCPP_INLINE_VISIBILITY
435    explicit codecvt_utf16(size_t __refs = 0)
436        : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
437
438    _LIBCPP_INLINE_VISIBILITY
439    ~codecvt_utf16() {}
440};
441
442// codecvt_utf8_utf16
443
444template <class _Elem> class __codecvt_utf8_utf16;
445
446template <>
447class _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<wchar_t>
448    : public codecvt<wchar_t, char, mbstate_t>
449{
450    unsigned long _Maxcode_;
451    codecvt_mode _Mode_;
452public:
453    typedef wchar_t   intern_type;
454    typedef char      extern_type;
455    typedef mbstate_t state_type;
456
457    _LIBCPP_INLINE_VISIBILITY
458    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
459                            codecvt_mode _Mode)
460        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
461          _Mode_(_Mode) {}
462protected:
463    virtual result
464        do_out(state_type& __st,
465               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
466               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
467    virtual result
468        do_in(state_type& __st,
469              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
470              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
471    virtual result
472        do_unshift(state_type& __st,
473                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
474    virtual int do_encoding() const _NOEXCEPT;
475    virtual bool do_always_noconv() const _NOEXCEPT;
476    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
477                          size_t __mx) const;
478    virtual int do_max_length() const _NOEXCEPT;
479};
480
481_LIBCPP_SUPPRESS_DEPRECATED_PUSH
482template <>
483class _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char32_t>
484    : public codecvt<char32_t, char, mbstate_t>
485{
486    unsigned long _Maxcode_;
487    codecvt_mode _Mode_;
488public:
489    typedef char32_t  intern_type;
490    typedef char      extern_type;
491    typedef mbstate_t state_type;
492
493    _LIBCPP_INLINE_VISIBILITY
494    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
495                            codecvt_mode _Mode)
496        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
497          _Mode_(_Mode) {}
498_LIBCPP_SUPPRESS_DEPRECATED_POP
499
500protected:
501    virtual result
502        do_out(state_type& __st,
503               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
504               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
505    virtual result
506        do_in(state_type& __st,
507              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
508              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
509    virtual result
510        do_unshift(state_type& __st,
511                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
512    virtual int do_encoding() const _NOEXCEPT;
513    virtual bool do_always_noconv() const _NOEXCEPT;
514    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
515                          size_t __mx) const;
516    virtual int do_max_length() const _NOEXCEPT;
517};
518
519_LIBCPP_SUPPRESS_DEPRECATED_PUSH
520template <>
521class _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char16_t>
522    : public codecvt<char16_t, char, mbstate_t>
523{
524    unsigned long _Maxcode_;
525    codecvt_mode _Mode_;
526public:
527    typedef char16_t  intern_type;
528    typedef char      extern_type;
529    typedef mbstate_t state_type;
530
531    _LIBCPP_INLINE_VISIBILITY
532    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
533                            codecvt_mode _Mode)
534        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
535          _Mode_(_Mode) {}
536_LIBCPP_SUPPRESS_DEPRECATED_POP
537
538protected:
539    virtual result
540        do_out(state_type& __st,
541               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
542               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
543    virtual result
544        do_in(state_type& __st,
545              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
546              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
547    virtual result
548        do_unshift(state_type& __st,
549                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
550    virtual int do_encoding() const _NOEXCEPT;
551    virtual bool do_always_noconv() const _NOEXCEPT;
552    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
553                          size_t __mx) const;
554    virtual int do_max_length() const _NOEXCEPT;
555};
556
557template <class _Elem, unsigned long _Maxcode = 0x10ffff,
558          codecvt_mode _Mode = (codecvt_mode)0>
559class _LIBCPP_TEMPLATE_VIS codecvt_utf8_utf16
560    : public __codecvt_utf8_utf16<_Elem>
561{
562public:
563    _LIBCPP_INLINE_VISIBILITY
564    explicit codecvt_utf8_utf16(size_t __refs = 0)
565        : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
566
567    _LIBCPP_INLINE_VISIBILITY
568    ~codecvt_utf8_utf16() {}
569};
570
571_LIBCPP_END_NAMESPACE_STD
572
573#endif // _LIBCPP_CODECVT
574