1// define the module for __config outside of the top level 'std' module
2// since __config may be included from C headers which may create an
3// include cycle.
4module std_config [system] [extern_c] {
5  header "__config"
6  export *
7}
8
9module std [system] {
10  export std_config
11  // FIXME: The standard does not require that each of these submodules
12  // re-exports its imported modules. We should provide an alternative form of
13  // export that issues a warning if a name from the submodule is used, and
14  // use that to provide a 'strict mode' for libc++.
15
16  // Deprecated C-compatibility headers. These can all be included from within
17  // an 'extern "C"' context.
18  module depr [extern_c] {
19    // <assert.h> provided by C library.
20    module ctype_h {
21      header "ctype.h"
22      export *
23    }
24    module errno_h {
25      header "errno.h"
26      export *
27    }
28    module fenv_h {
29      header "fenv.h"
30      export *
31    }
32    // <float.h> provided by compiler or C library.
33    module inttypes_h {
34      header "inttypes.h"
35      export stdint_h
36      export *
37    }
38    // <iso646.h> provided by compiler.
39    // <limits.h> provided by compiler or C library.
40    module locale_h {
41      @requires_LIBCXX_ENABLE_LOCALIZATION@
42      header "locale.h"
43      export *
44    }
45    module math_h {
46      header "math.h"
47      export *
48    }
49    module setjmp_h {
50      header "setjmp.h"
51      export *
52    }
53    module stdatomic_h {
54      @requires_LIBCXX_ENABLE_THREADS@
55      requires cplusplus23
56      header "stdatomic.h"
57      export *
58    }
59    // FIXME: <stdalign.h> is missing.
60    // <signal.h> provided by C library.
61    // <stdarg.h> provided by compiler.
62    module stdbool_h {
63      // <stdbool.h>'s __bool_true_false_are_defined macro requires textual inclusion.
64      textual header "stdbool.h"
65    }
66    module stddef_h {
67      // <stddef.h>'s __need_* macros require textual inclusion.
68      textual header "stddef.h"
69    }
70    module stdint_h {
71      header "stdint.h"
72      export *
73      // FIXME: This module only exists on OS X and for some reason the
74      // wildcard above doesn't export it.
75      export Darwin.C.stdint
76    }
77    module stdio_h {
78      // <stdio.h>'s __need_* macros require textual inclusion.
79      textual header "stdio.h"
80      export *
81      export Darwin.C.stdio
82    }
83    module stdlib_h {
84      // <stdlib.h>'s __need_* macros require textual inclusion.
85      textual header "stdlib.h"
86      export *
87    }
88    module string_h {
89      header "string.h"
90      export *
91    }
92    module uchar_h {
93      header "uchar.h"
94      export *
95    }
96    // <time.h> provided by C library.
97    module wchar_h {
98      @requires_LIBCXX_ENABLE_WIDE_CHARACTERS@
99      // <wchar.h>'s __need_* macros require textual inclusion.
100      textual header "wchar.h"
101      export *
102    }
103    module wctype_h {
104      @requires_LIBCXX_ENABLE_WIDE_CHARACTERS@
105      header "wctype.h"
106      export *
107    }
108  }
109
110  // <complex.h> and <tgmath.h> are not C headers in any real sense, do not
111  // allow their use in extern "C" contexts.
112  module complex_h {
113    header "complex.h"
114    export ccomplex
115    export *
116  }
117  module tgmath_h {
118    header "tgmath.h"
119    export ccomplex
120    export cmath
121    export *
122  }
123
124  // C compatibility headers.
125  module compat {
126    module cassert {
127      // <cassert>'s use of NDEBUG requires textual inclusion.
128      textual header "cassert"
129    }
130    module ccomplex {
131      header "ccomplex"
132      export complex
133      export *
134    }
135    module cctype {
136      header "cctype"
137      export *
138    }
139    module cerrno {
140      header "cerrno"
141      export *
142    }
143    module cfenv {
144      header "cfenv"
145      export *
146    }
147    module cfloat {
148      header "cfloat"
149      export *
150    }
151    module cinttypes {
152      header "cinttypes"
153      export cstdint
154      export *
155    }
156    module ciso646 {
157      header "ciso646"
158      export *
159    }
160    module climits {
161      header "climits"
162      export *
163    }
164    module clocale {
165      @requires_LIBCXX_ENABLE_LOCALIZATION@
166      header "clocale"
167      export *
168    }
169    module cmath {
170      header "cmath"
171      export *
172    }
173    module csetjmp {
174      header "csetjmp"
175      export *
176    }
177    module csignal {
178      header "csignal"
179      export *
180    }
181    // FIXME: <cstdalign> is missing.
182    module cstdarg {
183      header "cstdarg"
184      export *
185    }
186    module cstdbool {
187      header "cstdbool"
188      export *
189    }
190    module cstddef {
191      header "cstddef"
192      export *
193    }
194    module cstdint {
195      header "cstdint"
196      export depr.stdint_h
197      export *
198    }
199    module cstdio {
200      header "cstdio"
201      export *
202    }
203    module cstdlib {
204      header "cstdlib"
205      export *
206    }
207    module cstring {
208      header "cstring"
209      export *
210    }
211    module ctgmath {
212      header "ctgmath"
213      export ccomplex
214      export cmath
215      export *
216    }
217    module ctime {
218      header "ctime"
219      export *
220    }
221    module cuchar {
222      header "cuchar"
223      export *
224    }
225    module cwchar {
226      @requires_LIBCXX_ENABLE_WIDE_CHARACTERS@
227      header "cwchar"
228      export depr.stdio_h
229      export *
230    }
231    module cwctype {
232      @requires_LIBCXX_ENABLE_WIDE_CHARACTERS@
233      header "cwctype"
234      export *
235    }
236  }
237
238  module algorithm {
239    header "algorithm"
240    export initializer_list
241    export *
242
243    module __algorithm {
244      module adjacent_find                   { private header "__algorithm/adjacent_find.h" }
245      module all_of                          { private header "__algorithm/all_of.h" }
246      module any_of                          { private header "__algorithm/any_of.h" }
247      module binary_search                   { private header "__algorithm/binary_search.h" }
248      module clamp                           { private header "__algorithm/clamp.h" }
249      module comp                            { private header "__algorithm/comp.h" }
250      module comp_ref_type                   { private header "__algorithm/comp_ref_type.h" }
251      module copy                            { private header "__algorithm/copy.h" }
252      module copy_backward                   { private header "__algorithm/copy_backward.h" }
253      module copy_if                         { private header "__algorithm/copy_if.h" }
254      module copy_move_common                { private header "__algorithm/copy_move_common.h" }
255      module copy_n                          { private header "__algorithm/copy_n.h" }
256      module count                           { private header "__algorithm/count.h" }
257      module count_if                        { private header "__algorithm/count_if.h" }
258      module equal                           { private header "__algorithm/equal.h" }
259      module equal_range                     { private header "__algorithm/equal_range.h" }
260      module fill                            { private header "__algorithm/fill.h" }
261      module fill_n                          { private header "__algorithm/fill_n.h" }
262      module find                            { private header "__algorithm/find.h" }
263      module find_end                        { private header "__algorithm/find_end.h" }
264      module find_first_of                   { private header "__algorithm/find_first_of.h" }
265      module find_if                         { private header "__algorithm/find_if.h" }
266      module find_if_not                     { private header "__algorithm/find_if_not.h" }
267      module for_each                        { private header "__algorithm/for_each.h" }
268      module for_each_n                      { private header "__algorithm/for_each_n.h" }
269      module generate                        { private header "__algorithm/generate.h" }
270      module generate_n                      { private header "__algorithm/generate_n.h" }
271      module half_positive                   { private header "__algorithm/half_positive.h" }
272      module in_found_result                 { private header "__algorithm/in_found_result.h" }
273      module in_fun_result                   { private header "__algorithm/in_fun_result.h" }
274      module in_in_out_result                { private header "__algorithm/in_in_out_result.h" }
275      module in_in_result                    { private header "__algorithm/in_in_result.h" }
276      module in_out_out_result               { private header "__algorithm/in_out_out_result.h" }
277      module in_out_result                   { private header "__algorithm/in_out_result.h" }
278      module includes                        { private header "__algorithm/includes.h" }
279      module inplace_merge                   { private header "__algorithm/inplace_merge.h" }
280      module is_heap                         { private header "__algorithm/is_heap.h" }
281      module is_heap_until                   { private header "__algorithm/is_heap_until.h" }
282      module is_partitioned                  { private header "__algorithm/is_partitioned.h" }
283      module is_permutation                  { private header "__algorithm/is_permutation.h" }
284      module is_sorted                       { private header "__algorithm/is_sorted.h" }
285      module is_sorted_until                 { private header "__algorithm/is_sorted_until.h" }
286      module iter_swap                       { private header "__algorithm/iter_swap.h" }
287      module iterator_operations             {
288        private header "__algorithm/iterator_operations.h"
289        export *
290      }
291      module lexicographical_compare         { private header "__algorithm/lexicographical_compare.h" }
292      module lower_bound                     { private header "__algorithm/lower_bound.h" }
293      module make_heap                       { private header "__algorithm/make_heap.h" }
294      module make_projected                  { private header "__algorithm/make_projected.h" }
295      module max                             { private header "__algorithm/max.h" }
296      module max_element                     { private header "__algorithm/max_element.h" }
297      module merge                           { private header "__algorithm/merge.h" }
298      module min                             { private header "__algorithm/min.h" }
299      module min_element                     { private header "__algorithm/min_element.h" }
300      module min_max_result                  { private header "__algorithm/min_max_result.h" }
301      module minmax                          { private header "__algorithm/minmax.h" }
302      module minmax_element                  { private header "__algorithm/minmax_element.h" }
303      module mismatch                        { private header "__algorithm/mismatch.h" }
304      module move                            { private header "__algorithm/move.h" }
305      module move_backward                   { private header "__algorithm/move_backward.h" }
306      module next_permutation                { private header "__algorithm/next_permutation.h" }
307      module none_of                         { private header "__algorithm/none_of.h" }
308      module nth_element                     { private header "__algorithm/nth_element.h" }
309      module partial_sort                    { private header "__algorithm/partial_sort.h" }
310      module partial_sort_copy               { private header "__algorithm/partial_sort_copy.h" }
311      module partition                       { private header "__algorithm/partition.h" }
312      module partition_copy                  { private header "__algorithm/partition_copy.h" }
313      module partition_point                 { private header "__algorithm/partition_point.h" }
314      module pop_heap                        { private header "__algorithm/pop_heap.h" }
315      module prev_permutation                { private header "__algorithm/prev_permutation.h" }
316      module push_heap                       { private header "__algorithm/push_heap.h" }
317      module ranges_adjacent_find            { private header "__algorithm/ranges_adjacent_find.h" }
318      module ranges_all_of                   { private header "__algorithm/ranges_all_of.h" }
319      module ranges_any_of                   { private header "__algorithm/ranges_any_of.h" }
320      module ranges_binary_search {
321        private header "__algorithm/ranges_binary_search.h"
322        export functional.__functional.ranges_operations
323      }
324      module ranges_clamp {
325        private header "__algorithm/ranges_clamp.h"
326        export functional.__functional.ranges_operations
327      }
328      module ranges_copy {
329        private header "__algorithm/ranges_copy.h"
330        export algorithm.__algorithm.in_out_result
331      }
332      module ranges_copy_backward {
333        private header "__algorithm/ranges_copy_backward.h"
334        export algorithm.__algorithm.in_out_result
335      }
336      module ranges_copy_if {
337        private header "__algorithm/ranges_copy_if.h"
338        export algorithm.__algorithm.in_out_result
339      }
340      module ranges_copy_n {
341        private header "__algorithm/ranges_copy_n.h"
342        export algorithm.__algorithm.in_out_result
343      }
344      module ranges_count                    { private header "__algorithm/ranges_count.h" }
345      module ranges_count_if                 { private header "__algorithm/ranges_count_if.h" }
346      module ranges_equal                    { private header "__algorithm/ranges_equal.h" }
347      module ranges_equal_range {
348        private header "__algorithm/ranges_equal_range.h"
349        export functional.__functional.ranges_operations
350      }
351      module ranges_fill                     { private header "__algorithm/ranges_fill.h" }
352      module ranges_fill_n                   { private header "__algorithm/ranges_fill_n.h" }
353      module ranges_find                     { private header "__algorithm/ranges_find.h" }
354      module ranges_find_end                 { private header "__algorithm/ranges_find_end.h" }
355      module ranges_find_first_of            { private header "__algorithm/ranges_find_first_of.h" }
356      module ranges_find_if                  { private header "__algorithm/ranges_find_if.h" }
357      module ranges_find_if_not              { private header "__algorithm/ranges_find_if_not.h" }
358      module ranges_for_each {
359        private header "__algorithm/ranges_for_each.h"
360        export algorithm.__algorithm.in_fun_result
361      }
362      module ranges_for_each_n {
363        private header "__algorithm/ranges_for_each_n.h"
364        export algorithm.__algorithm.in_fun_result
365      }
366      module ranges_generate                 { private header "__algorithm/ranges_generate.h" }
367      module ranges_generate_n               { private header "__algorithm/ranges_generate_n.h" }
368      module ranges_includes {
369        private header "__algorithm/ranges_includes.h"
370        export functional.__functional.ranges_operations
371      }
372      module ranges_inplace_merge {
373        private header "__algorithm/ranges_inplace_merge.h"
374        export functional.__functional.ranges_operations
375      }
376      module ranges_is_heap {
377        private header "__algorithm/ranges_is_heap.h"
378        export functional.__functional.ranges_operations
379      }
380      module ranges_is_heap_until {
381        private header "__algorithm/ranges_is_heap_until.h"
382        export functional.__functional.ranges_operations
383      }
384      module ranges_is_partitioned           { private header "__algorithm/ranges_is_partitioned.h" }
385      module ranges_is_permutation           { private header "__algorithm/ranges_is_permutation.h" }
386      module ranges_is_sorted {
387        private header "__algorithm/ranges_is_sorted.h"
388        export functional.__functional.ranges_operations
389      }
390      module ranges_is_sorted_until {
391        private header "__algorithm/ranges_is_sorted_until.h"
392        export functional.__functional.ranges_operations
393      }
394      module ranges_iterator_concept         { private header "__algorithm/ranges_iterator_concept.h" }
395      module ranges_lexicographical_compare {
396        private header "__algorithm/ranges_lexicographical_compare.h"
397        export functional.__functional.ranges_operations
398      }
399      module ranges_lower_bound {
400        private header "__algorithm/ranges_lower_bound.h"
401        export functional.__functional.ranges_operations
402      }
403      module ranges_make_heap {
404        private header "__algorithm/ranges_make_heap.h"
405        export functional.__functional.ranges_operations
406      }
407      module ranges_max {
408        private header "__algorithm/ranges_max.h"
409        export functional.__functional.ranges_operations
410      }
411      module ranges_max_element {
412        private header "__algorithm/ranges_max_element.h"
413        export functional.__functional.ranges_operations
414      }
415      module ranges_merge {
416        private header "__algorithm/ranges_merge.h"
417        export algorithm.__algorithm.in_in_out_result
418      }
419      module ranges_min {
420        private header "__algorithm/ranges_min.h"
421        export functional.__functional.ranges_operations
422      }
423      module ranges_min_element {
424        private header "__algorithm/ranges_min_element.h"
425        export functional.__functional.ranges_operations
426      }
427      module ranges_minmax {
428        private header "__algorithm/ranges_minmax.h"
429        export functional.__functional.ranges_operations
430        export algorithm.__algorithm.min_max_result
431      }
432      module ranges_minmax_element {
433        private header "__algorithm/ranges_minmax_element.h"
434        export functional.__functional.ranges_operations
435        export algorithm.__algorithm.min_max_result
436      }
437      module ranges_mismatch {
438        private header "__algorithm/ranges_mismatch.h"
439        export algorithm.__algorithm.in_in_result
440      }
441      module ranges_move {
442        private header "__algorithm/ranges_move.h"
443        export algorithm.__algorithm.in_out_result
444      }
445      module ranges_move_backward {
446        private header "__algorithm/ranges_move_backward.h"
447        export algorithm.__algorithm.in_out_result
448      }
449      module ranges_next_permutation {
450        private header "__algorithm/ranges_next_permutation.h"
451        export algorithm.__algorithm.in_found_result
452        export functional.__functional.ranges_operations
453      }
454      module ranges_none_of                  { private header "__algorithm/ranges_none_of.h" }
455      module ranges_nth_element {
456        private header "__algorithm/ranges_nth_element.h"
457        export functional.__functional.ranges_operations
458      }
459      module ranges_partial_sort {
460        private header "__algorithm/ranges_partial_sort.h"
461        export algorithm.__algorithm.in_out_result
462        export functional.__functional.ranges_operations
463      }
464      module ranges_partial_sort_copy {
465        private header "__algorithm/ranges_partial_sort_copy.h"
466        export algorithm.__algorithm.in_out_out_result
467        export functional.__functional.ranges_operations
468      }
469      module ranges_partition                { private header "__algorithm/ranges_partition.h" }
470      module ranges_partition_copy           { private header "__algorithm/ranges_partition_copy.h" }
471      module ranges_partition_point          { private header "__algorithm/ranges_partition_point.h" }
472      module ranges_pop_heap {
473        private header "__algorithm/ranges_pop_heap.h"
474        export functional.__functional.ranges_operations
475      }
476      module ranges_prev_permutation {
477        private header "__algorithm/ranges_prev_permutation.h"
478        export algorithm.__algorithm.in_found_result
479        export functional.__functional.ranges_operations
480      }
481      module ranges_push_heap {
482        private header "__algorithm/ranges_push_heap.h"
483        export functional.__functional.ranges_operations
484      }
485      module ranges_remove                   { private header "__algorithm/ranges_remove.h" }
486      module ranges_remove_copy {
487        private header "__algorithm/ranges_remove_copy.h"
488        export algorithm.__algorithm.in_out_result
489      }
490      module ranges_remove_copy_if {
491        private header "__algorithm/ranges_remove_copy_if.h"
492        export algorithm.__algorithm.in_out_result
493      }
494      module ranges_remove_if                { private header "__algorithm/ranges_remove_if.h" }
495      module ranges_replace                  { private header "__algorithm/ranges_replace.h" }
496      module ranges_replace_copy {
497        private header "__algorithm/ranges_replace_copy.h"
498        export algorithm.__algorithm.in_out_result
499      }
500      module ranges_replace_copy_if {
501        private header "__algorithm/ranges_replace_copy_if.h"
502        export algorithm.__algorithm.in_out_result
503      }
504      module ranges_replace_if               { private header "__algorithm/ranges_replace_if.h" }
505      module ranges_reverse                  { private header "__algorithm/ranges_reverse.h" }
506      module ranges_reverse_copy {
507        private header "__algorithm/ranges_reverse_copy.h"
508        export algorithm.__algorithm.in_out_result
509      }
510      module ranges_rotate                   { private header "__algorithm/ranges_rotate.h" }
511      module ranges_rotate_copy {
512        private header "__algorithm/ranges_rotate_copy.h"
513        export algorithm.__algorithm.in_out_result
514      }
515      module ranges_sample                   { private header "__algorithm/ranges_sample.h" }
516      module ranges_search                   { private header "__algorithm/ranges_search.h" }
517      module ranges_search_n                 { private header "__algorithm/ranges_search_n.h" }
518      module ranges_set_difference {
519        private header "__algorithm/ranges_set_difference.h"
520        export algorithm.__algorithm.in_out_result
521      }
522      module ranges_set_intersection {
523        private header "__algorithm/ranges_set_intersection.h"
524        export algorithm.__algorithm.in_in_out_result
525      }
526      module ranges_set_symmetric_difference {
527        private header "__algorithm/ranges_set_symmetric_difference.h"
528        export algorithm.__algorithm.in_in_out_result
529        export functional.__functional.ranges_operations
530      }
531      module ranges_set_union {
532        private header "__algorithm/ranges_set_union.h"
533        export algorithm.__algorithm.in_in_out_result
534        export functional.__functional.ranges_operations
535      }
536      module ranges_shuffle                  { private header "__algorithm/ranges_shuffle.h" }
537      module ranges_sort {
538        private header "__algorithm/ranges_sort.h"
539        export functional.__functional.ranges_operations
540      }
541      module ranges_sort_heap {
542        private header "__algorithm/ranges_sort_heap.h"
543        export functional.__functional.ranges_operations
544      }
545      module ranges_stable_partition         { private header "__algorithm/ranges_stable_partition.h" }
546      module ranges_stable_sort {
547        private header "__algorithm/ranges_stable_sort.h"
548        export functional.__functional.ranges_operations
549      }
550      module ranges_swap_ranges {
551        private header "__algorithm/ranges_swap_ranges.h"
552        export algorithm.__algorithm.in_in_result
553      }
554      module ranges_transform {
555        private header "__algorithm/ranges_transform.h"
556        export algorithm.__algorithm.in_in_out_result
557        export algorithm.__algorithm.in_out_result
558      }
559      module uniform_random_bit_generator_adaptor {
560        private header "__algorithm/uniform_random_bit_generator_adaptor.h"
561      }
562      module ranges_unique                   { private header "__algorithm/ranges_unique.h" }
563      module ranges_unique_copy {
564        private header "__algorithm/ranges_unique_copy.h"
565        export algorithm.__algorithm.in_out_result
566      }
567      module ranges_upper_bound {
568        private header "__algorithm/ranges_upper_bound.h"
569        export functional.__functional.ranges_operations
570      }
571      module remove                          { private header "__algorithm/remove.h" }
572      module remove_copy                     { private header "__algorithm/remove_copy.h" }
573      module remove_copy_if                  { private header "__algorithm/remove_copy_if.h" }
574      module remove_if                       { private header "__algorithm/remove_if.h" }
575      module replace                         { private header "__algorithm/replace.h" }
576      module replace_copy                    { private header "__algorithm/replace_copy.h" }
577      module replace_copy_if                 { private header "__algorithm/replace_copy_if.h" }
578      module replace_if                      { private header "__algorithm/replace_if.h" }
579      module reverse                         { private header "__algorithm/reverse.h" }
580      module reverse_copy                    { private header "__algorithm/reverse_copy.h" }
581      module rotate                          { private header "__algorithm/rotate.h" }
582      module rotate_copy                     { private header "__algorithm/rotate_copy.h" }
583      module sample                          { private header "__algorithm/sample.h" }
584      module search                          { private header "__algorithm/search.h" }
585      module search_n                        { private header "__algorithm/search_n.h" }
586      module set_difference                  { private header "__algorithm/set_difference.h" }
587      module set_intersection                { private header "__algorithm/set_intersection.h" }
588      module set_symmetric_difference        { private header "__algorithm/set_symmetric_difference.h" }
589      module set_union                       { private header "__algorithm/set_union.h" }
590      module shift_left                      { private header "__algorithm/shift_left.h" }
591      module shift_right                     { private header "__algorithm/shift_right.h" }
592      module shuffle                         { private header "__algorithm/shuffle.h" }
593      module sift_down                       { private header "__algorithm/sift_down.h" }
594      module sort                            { private header "__algorithm/sort.h" }
595      module sort_heap                       { private header "__algorithm/sort_heap.h" }
596      module stable_partition                { private header "__algorithm/stable_partition.h" }
597      module stable_sort                     { private header "__algorithm/stable_sort.h" }
598      module swap_ranges                     { private header "__algorithm/swap_ranges.h" }
599      module transform                       { private header "__algorithm/transform.h" }
600      module unique                          { private header "__algorithm/unique.h" }
601      module unique_copy                     { private header "__algorithm/unique_copy.h" }
602      module unwrap_iter                     { private header "__algorithm/unwrap_iter.h" }
603      module unwrap_range                    { private header "__algorithm/unwrap_range.h" }
604      module upper_bound                     { private header "__algorithm/upper_bound.h" }
605    }
606  }
607  module any {
608    header "any"
609    export *
610  }
611  module array {
612    header "array"
613    export initializer_list
614    export *
615
616    module array_fwd { private header "__fwd/array.h" }
617  }
618  module atomic {
619    header "atomic"
620    export *
621  }
622  module barrier {
623    @requires_LIBCXX_ENABLE_THREADS@
624    header "barrier"
625    export *
626  }
627  module bit {
628    header "bit"
629    export *
630
631    module __bit {
632      module bit_cast       { private header "__bit/bit_cast.h" }
633      module bit_ceil       { private header "__bit/bit_ceil.h" }
634      module bit_floor      { private header "__bit/bit_floor.h" }
635      module bit_log2       { private header "__bit/bit_log2.h" }
636      module bit_width      { private header "__bit/bit_width.h" }
637      module blsr           { private header "__bit/blsr.h" }
638      module byteswap       { private header "__bit/byteswap.h" }
639      module countl         { private header "__bit/countl.h" }
640      module countr         { private header "__bit/countr.h" }
641      module endian         { private header "__bit/endian.h" }
642      module has_single_bit { private header "__bit/has_single_bit.h" }
643      module popcount       { private header "__bit/popcount.h" }
644      module rotate         { private header "__bit/rotate.h" }
645    }
646  }
647  module bitset {
648    header "bitset"
649    export string
650    export iosfwd
651    export *
652  }
653  // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
654  module charconv {
655    header "charconv"
656    export *
657
658    module __charconv {
659      module chars_format      { private header "__charconv/chars_format.h" }
660      module from_chars_result { private header "__charconv/from_chars_result.h" }
661      module tables            { private header "__charconv/tables.h" }
662      module to_chars_base_10  { private header "__charconv/to_chars_base_10.h" }
663      module to_chars_result   { private header "__charconv/to_chars_result.h" }
664    }
665
666  }
667  module chrono {
668    header "chrono"
669    export *
670
671    module __chrono {
672      module calendar               { private header "__chrono/calendar.h" }
673      module convert_to_timespec    { private header "__chrono/convert_to_timespec.h" }
674      module convert_to_tm          { private header "__chrono/convert_to_tm.h" }
675      module day                    { private header "__chrono/day.h" }
676      module duration               { private header "__chrono/duration.h" }
677      module file_clock             { private header "__chrono/file_clock.h" }
678      module formatter              {
679        @requires_LIBCXX_ENABLE_LOCALIZATION@
680        private header "__chrono/formatter.h"
681      }
682      module hh_mm_ss               { private header "__chrono/hh_mm_ss.h" }
683      module high_resolution_clock  {
684        private header "__chrono/high_resolution_clock.h"
685        export steady_clock
686        export system_clock
687        export time_point
688      }
689      module literals               { private header "__chrono/literals.h" }
690      module month                  { private header "__chrono/month.h" }
691      module month_weekday          { private header "__chrono/month_weekday.h" }
692      module monthday               { private header "__chrono/monthday.h" }
693      module ostream                {
694        @requires_LIBCXX_ENABLE_LOCALIZATION@
695        private header "__chrono/ostream.h"
696      }
697      module parser_std_format_spec {
698        @requires_LIBCXX_ENABLE_LOCALIZATION@
699        private header "__chrono/parser_std_format_spec.h"
700      }
701      module statically_widen       { private header "__chrono/statically_widen.h" }
702      module steady_clock           { private header "__chrono/steady_clock.h" }
703      module system_clock           { private header "__chrono/system_clock.h" }
704      module time_point             { private header "__chrono/time_point.h" }
705      module weekday                { private header "__chrono/weekday.h" }
706      module year                   { private header "__chrono/year.h" }
707      module year_month             { private header "__chrono/year_month.h" }
708      module year_month_day         { private header "__chrono/year_month_day.h" }
709      module year_month_weekday     { private header "__chrono/year_month_weekday.h" }
710    }
711  }
712  module codecvt {
713    @requires_LIBCXX_ENABLE_LOCALIZATION@
714    header "codecvt"
715    export *
716  }
717  module compare {
718    header "compare"
719    export *
720
721    module __compare {
722      module common_comparison_category     { private header "__compare/common_comparison_category.h" }
723      module compare_partial_order_fallback { private header "__compare/compare_partial_order_fallback.h" }
724      module compare_strong_order_fallback  { private header "__compare/compare_strong_order_fallback.h" }
725      module compare_three_way              { private header "__compare/compare_three_way.h" }
726      module compare_three_way_result       { private header "__compare/compare_three_way_result.h" }
727      module compare_weak_order_fallback    { private header "__compare/compare_weak_order_fallback.h" }
728      module is_eq                          { private header "__compare/is_eq.h" }
729      module ordering                       { private header "__compare/ordering.h" }
730      module partial_order                  { private header "__compare/partial_order.h" }
731      module strong_order                   { private header "__compare/strong_order.h" }
732      module synth_three_way                { private header "__compare/synth_three_way.h" }
733      module three_way_comparable           { private header "__compare/three_way_comparable.h" }
734      module weak_order                     { private header "__compare/weak_order.h" }
735    }
736  }
737  module complex {
738    header "complex"
739    export *
740  }
741  module concepts {
742    header "concepts"
743    export *
744
745    module __concepts {
746      module arithmetic                 { private header "__concepts/arithmetic.h" }
747      module assignable                 { private header "__concepts/assignable.h" }
748      module boolean_testable           { private header "__concepts/boolean_testable.h" }
749      module class_or_enum              { private header "__concepts/class_or_enum.h" }
750      module common_reference_with      { private header "__concepts/common_reference_with.h" }
751      module common_with                { private header "__concepts/common_with.h" }
752      module constructible              { private header "__concepts/constructible.h" }
753      module convertible_to             { private header "__concepts/convertible_to.h" }
754      module copyable                   { private header "__concepts/copyable.h" }
755      module derived_from               { private header "__concepts/derived_from.h" }
756      module destructible               { private header "__concepts/destructible.h" }
757      module different_from             { private header "__concepts/different_from.h" }
758      module equality_comparable {
759        private header "__concepts/equality_comparable.h"
760        export type_traits.common_reference
761      }
762      module invocable                  { private header "__concepts/invocable.h" }
763      module movable                    { private header "__concepts/movable.h" }
764      module predicate                  { private header "__concepts/predicate.h" }
765      module regular                    { private header "__concepts/regular.h" }
766      module relation                   { private header "__concepts/relation.h" }
767      module same_as {
768        private header "__concepts/same_as.h"
769        export type_traits.is_same
770      }
771      module semiregular                { private header "__concepts/semiregular.h" }
772      module swappable                  { private header "__concepts/swappable.h" }
773      module totally_ordered            { private header "__concepts/totally_ordered.h" }
774    }
775  }
776  module condition_variable {
777    header "condition_variable"
778    export *
779  }
780  module coroutine {
781    requires coroutines
782    header "coroutine"
783    export compare
784    export *
785
786    module __coroutine {
787      module coroutine_handle           { private header "__coroutine/coroutine_handle.h" }
788      module coroutine_traits           { private header "__coroutine/coroutine_traits.h" }
789      module noop_coroutine_handle      { private header "__coroutine/noop_coroutine_handle.h" }
790      module trivial_awaitables         { private header "__coroutine/trivial_awaitables.h" }
791    }
792  }
793  module deque {
794    header "deque"
795    export initializer_list
796    export *
797  }
798  module exception {
799    header "exception"
800    export *
801  }
802  module execution {
803    header "execution"
804    export *
805  }
806  module expected {
807    header "expected"
808    export *
809
810    module __expected {
811      module bad_expected_access          { private header "__expected/bad_expected_access.h" }
812      module expected                     { private header "__expected/expected.h" }
813      module unexpect                     { private header "__expected/unexpect.h" }
814      module unexpected                   { private header "__expected/unexpected.h" }
815    }
816  }
817  module filesystem {
818    @requires_LIBCXX_ENABLE_FILESYSTEM@
819    header "filesystem"
820    export *
821
822    module __filesystem {
823      module copy_options                 { private header "__filesystem/copy_options.h" }
824      module directory_entry              { private header "__filesystem/directory_entry.h" }
825      module directory_iterator           { private header "__filesystem/directory_iterator.h" }
826      module directory_options            { private header "__filesystem/directory_options.h" }
827      module file_status                  { private header "__filesystem/file_status.h" }
828      module file_time_type               { private header "__filesystem/file_time_type.h" }
829      module file_type                    { private header "__filesystem/file_type.h" }
830      module filesystem_error             { private header "__filesystem/filesystem_error.h" }
831      module operations                   { private header "__filesystem/operations.h" }
832      module path                         { private header "__filesystem/path.h" }
833      module path_iterator                { private header "__filesystem/path_iterator.h" }
834      module perm_options                 { private header "__filesystem/perm_options.h" }
835      module perms                        { private header "__filesystem/perms.h" }
836      module recursive_directory_iterator { private header "__filesystem/recursive_directory_iterator.h" }
837      module space_info                   { private header "__filesystem/space_info.h" }
838      module u8path                       { private header "__filesystem/u8path.h" }
839    }
840  }
841  module format {
842    header "format"
843    export *
844
845    module __format {
846      module buffer                          { private header "__format/buffer.h" }
847      module concepts                        { private header "__format/concepts.h" }
848      module container_adaptor               { private header "__format/container_adaptor.h" }
849      module enable_insertable               { private header "__format/enable_insertable.h" }
850      module escaped_output_table            { private header "__format/escaped_output_table.h" }
851      module extended_grapheme_cluster_table { private header "__format/extended_grapheme_cluster_table.h" }
852      module format_arg                      { private header "__format/format_arg.h" }
853      module format_arg_store                { private header "__format/format_arg_store.h" }
854      module format_args                     { private header "__format/format_args.h" }
855      module format_context {
856        private header "__format/format_context.h"
857        export optional
858        export locale
859      }
860      module format_error                    { private header "__format/format_error.h" }
861      module format_functions                { private header "__format/format_functions.h" }
862      module format_fwd                      { private header "__format/format_fwd.h" }
863      module format_parse_context            { private header "__format/format_parse_context.h" }
864      module format_string                   { private header "__format/format_string.h" }
865      module format_to_n_result {
866        private header "__format/format_to_n_result.h"
867        export iterator.__iterator.incrementable_traits
868      }
869      module formatter                       { private header "__format/formatter.h" }
870      module formatter_bool                  { private header "__format/formatter_bool.h" }
871      module formatter_char                  { private header "__format/formatter_char.h" }
872      module formatter_floating_point        { private header "__format/formatter_floating_point.h" }
873      module formatter_integer               { private header "__format/formatter_integer.h" }
874      module formatter_integral              { private header "__format/formatter_integral.h" }
875      module formatter_output                { private header "__format/formatter_output.h" }
876      module formatter_pointer               { private header "__format/formatter_pointer.h" }
877      module formatter_string                { private header "__format/formatter_string.h" }
878      module formatter_tuple                 { private header "__format/formatter_tuple.h" }
879      module parser_std_format_spec          { private header "__format/parser_std_format_spec.h" }
880      module range_default_formatter         { private header "__format/range_default_formatter.h" }
881      module range_formatter                 { private header "__format/range_formatter.h" }
882      module unicode                         { private header "__format/unicode.h" }
883    }
884  }
885  module forward_list {
886    header "forward_list"
887    export initializer_list
888    export *
889  }
890  module fstream {
891    @requires_LIBCXX_ENABLE_LOCALIZATION@
892    @requires_LIBCXX_ENABLE_FSTREAM@
893    header "fstream"
894    export *
895  }
896  module functional {
897    header "functional"
898    export *
899
900    module __functional {
901      module binary_function            { private header "__functional/binary_function.h" }
902      module binary_negate              { private header "__functional/binary_negate.h" }
903      module bind                       { private header "__functional/bind.h" }
904      module bind_back                  { private header "__functional/bind_back.h" }
905      module bind_front                 { private header "__functional/bind_front.h" }
906      module binder1st                  { private header "__functional/binder1st.h" }
907      module binder2nd                  { private header "__functional/binder2nd.h" }
908      module boyer_moore_searcher       { private header "__functional/boyer_moore_searcher.h" }
909      module compose                    { private header "__functional/compose.h" }
910      module default_searcher           { private header "__functional/default_searcher.h" }
911      module function                   { private header "__functional/function.h" }
912      module hash                       { private header "__functional/hash.h" }
913      module hash_fwd                   { private header "__fwd/hash.h" }
914      module identity                   { private header "__functional/identity.h" }
915      module invoke                     {
916        private header "__functional/invoke.h"
917        export type_traits
918      }
919      module is_transparent             { private header "__functional/is_transparent.h" }
920      module mem_fn                     { private header "__functional/mem_fn.h" }
921      module mem_fun_ref                { private header "__functional/mem_fun_ref.h" }
922      module not_fn                     { private header "__functional/not_fn.h" }
923      module operations                 { private header "__functional/operations.h" }
924      module perfect_forward            { private header "__functional/perfect_forward.h" }
925      module pointer_to_binary_function { private header "__functional/pointer_to_binary_function.h" }
926      module pointer_to_unary_function  { private header "__functional/pointer_to_unary_function.h" }
927      module ranges_operations          { private header "__functional/ranges_operations.h" }
928      module reference_wrapper          { private header "__functional/reference_wrapper.h" }
929      module unary_function             { private header "__functional/unary_function.h" }
930      module unary_negate               { private header "__functional/unary_negate.h" }
931      module unwrap_ref                 { private header "__functional/unwrap_ref.h" }
932      module weak_result_type           { private header "__functional/weak_result_type.h" }
933    }
934  }
935  module future {
936    @requires_LIBCXX_ENABLE_THREADS@
937    header "future"
938    export *
939  }
940  module initializer_list {
941    header "initializer_list"
942    export *
943  }
944  module iomanip {
945    @requires_LIBCXX_ENABLE_LOCALIZATION@
946    header "iomanip"
947    export *
948  }
949  module ios {
950    @requires_LIBCXX_ENABLE_LOCALIZATION@
951    header "ios"
952    export iosfwd
953    export *
954
955    module __ios {
956      module fpos { private header "__ios/fpos.h" }
957    }
958  }
959  module iosfwd {
960    header "iosfwd"
961    export *
962  }
963  module iostream {
964    @requires_LIBCXX_ENABLE_LOCALIZATION@
965    header "iostream"
966    export ios
967    export streambuf
968    export istream
969    export ostream
970    export *
971  }
972  module istream {
973    @requires_LIBCXX_ENABLE_LOCALIZATION@
974    header "istream"
975    // FIXME: should re-export ios, streambuf?
976    export *
977  }
978  module iterator {
979    header "iterator"
980    export *
981
982    module __iterator {
983      module access                { private header "__iterator/access.h" }
984      module advance               { private header "__iterator/advance.h" }
985      module back_insert_iterator  { private header "__iterator/back_insert_iterator.h" }
986      module bounded_iter          { private header "__iterator/bounded_iter.h" }
987      module common_iterator       { private header "__iterator/common_iterator.h" }
988      module concepts {
989        private header "__iterator/concepts.h"
990        export concepts.equality_comparable
991        export type_traits.common_reference
992      }
993      module counted_iterator      { private header "__iterator/counted_iterator.h" }
994      module data                  { private header "__iterator/data.h" }
995      module default_sentinel      { private header "__iterator/default_sentinel.h" }
996      module distance              { private header "__iterator/distance.h" }
997      module empty                 { private header "__iterator/empty.h" }
998      module erase_if_container    { private header "__iterator/erase_if_container.h" }
999      module front_insert_iterator { private header "__iterator/front_insert_iterator.h" }
1000      module incrementable_traits  { private header "__iterator/incrementable_traits.h" }
1001      module indirectly_comparable { private header "__iterator/indirectly_comparable.h" }
1002      module insert_iterator       { private header "__iterator/insert_iterator.h" }
1003      module istream_iterator      { private header "__iterator/istream_iterator.h" }
1004      module istreambuf_iterator   { private header "__iterator/istreambuf_iterator.h" }
1005      module iter_move             { private header "__iterator/iter_move.h" }
1006      module iter_swap             { private header "__iterator/iter_swap.h" }
1007      module iterator              { private header "__iterator/iterator.h" }
1008      module iterator_traits       { private header "__iterator/iterator_traits.h" }
1009      module iterator_with_data    { private header "__iterator/iterator_with_data.h" }
1010      module mergeable {
1011        private header "__iterator/mergeable.h"
1012        export functional.__functional.ranges_operations
1013      }
1014      module move_iterator         { private header "__iterator/move_iterator.h" }
1015      module move_sentinel         { private header "__iterator/move_sentinel.h" }
1016      module next                  { private header "__iterator/next.h" }
1017      module ostream_iterator      { private header "__iterator/ostream_iterator.h" }
1018      module ostreambuf_iterator   {
1019        private header "__iterator/ostreambuf_iterator.h"
1020        export iosfwd
1021      }
1022      module permutable            { private header "__iterator/permutable.h" }
1023      module prev                  { private header "__iterator/prev.h" }
1024      module projected             { private header "__iterator/projected.h" }
1025      module readable_traits       { private header "__iterator/readable_traits.h" }
1026      module reverse_access        { private header "__iterator/reverse_access.h" }
1027      module reverse_iterator      { private header "__iterator/reverse_iterator.h" }
1028      module segmented_iterator    { private header "__iterator/segmented_iterator.h" }
1029      module size                  { private header "__iterator/size.h" }
1030      module sortable {
1031        private header "__iterator/sortable.h"
1032        export functional.__functional.ranges_operations
1033      }
1034      module unreachable_sentinel  { private header "__iterator/unreachable_sentinel.h" }
1035      module wrap_iter             { private header "__iterator/wrap_iter.h" }
1036    }
1037  }
1038  module latch {
1039    @requires_LIBCXX_ENABLE_THREADS@
1040    header "latch"
1041    export *
1042  }
1043
1044  module __debug_utils {
1045    module randomize_range { private header "__debug_utils/randomize_range.h" }
1046  }
1047
1048  module limits {
1049    header "limits"
1050    export *
1051  }
1052  module list {
1053    header "list"
1054    export initializer_list
1055    export *
1056  }
1057  module locale {
1058    @requires_LIBCXX_ENABLE_LOCALIZATION@
1059    header "locale"
1060    export *
1061  }
1062  module map {
1063    header "map"
1064    export initializer_list
1065    export *
1066  }
1067  module memory {
1068    header "memory"
1069    export *
1070
1071    module __memory {
1072      module addressof                       { private header "__memory/addressof.h" }
1073      module align                           { private header "__memory/align.h" }
1074      module allocate_at_least               { private header "__memory/allocate_at_least.h" }
1075      module allocation_guard                { private header "__memory/allocation_guard.h" }
1076      module allocator                       { private header "__memory/allocator.h" }
1077      module allocator_arg_t                 { private header "__memory/allocator_arg_t.h" }
1078      module allocator_destructor            { private header "__memory/allocator_destructor.h" }
1079      module allocator_traits                { private header "__memory/allocator_traits.h" }
1080      module assume_aligned                  { private header "__memory/assume_aligned.h" }
1081      module auto_ptr                        { private header "__memory/auto_ptr.h" }
1082      module builtin_new_allocator           { private header "__memory/builtin_new_allocator.h" }
1083      module compressed_pair                 { private header "__memory/compressed_pair.h" }
1084      module concepts                        { private header "__memory/concepts.h" }
1085      module construct_at                    { private header "__memory/construct_at.h" }
1086      module destruct_n                      { private header "__memory/destruct_n.h" }
1087      module pointer_traits                  { private header "__memory/pointer_traits.h" }
1088      module ranges_construct_at             { private header "__memory/ranges_construct_at.h" }
1089      module ranges_uninitialized_algorithms {
1090        private header "__memory/ranges_uninitialized_algorithms.h"
1091        export algorithm.__algorithm.in_out_result
1092      }
1093      module raw_storage_iterator            { private header "__memory/raw_storage_iterator.h" }
1094      module shared_ptr                      { private header "__memory/shared_ptr.h" }
1095      module swap_allocator                  { private header "__memory/swap_allocator.h" }
1096      module temp_value                      { private header "__memory/temp_value.h" }
1097      module temporary_buffer                { private header "__memory/temporary_buffer.h" }
1098      module uninitialized_algorithms        { private header "__memory/uninitialized_algorithms.h" }
1099      module unique_ptr                      { private header "__memory/unique_ptr.h" }
1100      module uses_allocator                  { private header "__memory/uses_allocator.h" }
1101      module uses_allocator_construction     { private header "__memory/uses_allocator_construction.h" }
1102      module voidify                         { private header "__memory/voidify.h" }
1103    }
1104  }
1105  module memory_resource {
1106    header "memory_resource"
1107    export *
1108
1109    module __memory_resource {
1110      module memory_resource              { private header "__memory_resource/memory_resource.h" }
1111      module memory_resource_fwd          { private header "__fwd/memory_resource.h" }
1112      module monotonic_buffer_resource    { private header "__memory_resource/monotonic_buffer_resource.h" }
1113      module polymorphic_allocator        { private header "__memory_resource/polymorphic_allocator.h" }
1114      module pool_options                 { private header "__memory_resource/pool_options.h" }
1115      module synchronized_pool_resource   { private header "__memory_resource/synchronized_pool_resource.h" }
1116      module unsynchronized_pool_resource { private header "__memory_resource/unsynchronized_pool_resource.h" }
1117    }
1118  }
1119  module mutex {
1120    @requires_LIBCXX_ENABLE_THREADS@
1121    header "mutex"
1122    export *
1123  }
1124  module new {
1125    header "new"
1126    export *
1127  }
1128  module numbers {
1129    header "numbers"
1130    export *
1131  }
1132  module numeric {
1133    header "numeric"
1134    export *
1135
1136    module __numeric {
1137      module accumulate               { private header "__numeric/accumulate.h" }
1138      module adjacent_difference      { private header "__numeric/adjacent_difference.h" }
1139      module exclusive_scan           { private header "__numeric/exclusive_scan.h" }
1140      module gcd_lcm                  { private header "__numeric/gcd_lcm.h" }
1141      module inclusive_scan           { private header "__numeric/inclusive_scan.h" }
1142      module inner_product            { private header "__numeric/inner_product.h" }
1143      module iota                     { private header "__numeric/iota.h" }
1144      module midpoint                 { private header "__numeric/midpoint.h" }
1145      module partial_sum              { private header "__numeric/partial_sum.h" }
1146      module reduce                   { private header "__numeric/reduce.h" }
1147      module transform_exclusive_scan { private header "__numeric/transform_exclusive_scan.h" }
1148      module transform_inclusive_scan { private header "__numeric/transform_inclusive_scan.h" }
1149      module transform_reduce         { private header "__numeric/transform_reduce.h" }
1150    }
1151  }
1152  module optional {
1153    header "optional"
1154    export *
1155  }
1156  module ostream {
1157    @requires_LIBCXX_ENABLE_LOCALIZATION@
1158    header "ostream"
1159    // FIXME: should re-export ios, streambuf?
1160    export *
1161  }
1162  module queue {
1163    header "queue"
1164    export initializer_list
1165    export *
1166  }
1167  module random {
1168    header "random"
1169    export initializer_list
1170    export *
1171
1172    module __random {
1173      module bernoulli_distribution          { private header "__random/bernoulli_distribution.h" }
1174      module binomial_distribution           { private header "__random/binomial_distribution.h" }
1175      module cauchy_distribution             { private header "__random/cauchy_distribution.h" }
1176      module chi_squared_distribution        { private header "__random/chi_squared_distribution.h" }
1177      module clamp_to_integral               { private header "__random/clamp_to_integral.h" }
1178      module default_random_engine           { private header "__random/default_random_engine.h" }
1179      module discard_block_engine            { private header "__random/discard_block_engine.h" }
1180      module discrete_distribution {
1181        private header "__random/discrete_distribution.h"
1182        export vector
1183      }
1184      module exponential_distribution        { private header "__random/exponential_distribution.h" }
1185      module extreme_value_distribution      { private header "__random/extreme_value_distribution.h" }
1186      module fisher_f_distribution           { private header "__random/fisher_f_distribution.h" }
1187      module gamma_distribution              { private header "__random/gamma_distribution.h" }
1188      module generate_canonical              { private header "__random/generate_canonical.h" }
1189      module geometric_distribution          { private header "__random/geometric_distribution.h" }
1190      module independent_bits_engine         { private header "__random/independent_bits_engine.h" }
1191      module is_seed_sequence                { private header "__random/is_seed_sequence.h" }
1192      module is_valid                        { private header "__random/is_valid.h" }
1193      module knuth_b                         { private header "__random/knuth_b.h" }
1194      module linear_congruential_engine      { private header "__random/linear_congruential_engine.h" }
1195      module log2                            { private header "__random/log2.h" }
1196      module lognormal_distribution          { private header "__random/lognormal_distribution.h" }
1197      module mersenne_twister_engine         { private header "__random/mersenne_twister_engine.h" }
1198      module negative_binomial_distribution  { private header "__random/negative_binomial_distribution.h" }
1199      module normal_distribution             { private header "__random/normal_distribution.h" }
1200      module piecewise_constant_distribution {
1201        private header "__random/piecewise_constant_distribution.h"
1202        export vector
1203      }
1204      module piecewise_linear_distribution {
1205        private header "__random/piecewise_linear_distribution.h"
1206        export vector
1207      }
1208      module poisson_distribution            { private header "__random/poisson_distribution.h" }
1209      module random_device                   { private header "__random/random_device.h" }
1210      module ranlux                          { private header "__random/ranlux.h" }
1211      module seed_seq                        { private header "__random/seed_seq.h" }
1212      module shuffle_order_engine            { private header "__random/shuffle_order_engine.h" }
1213      module student_t_distribution          { private header "__random/student_t_distribution.h" }
1214      module subtract_with_carry_engine      { private header "__random/subtract_with_carry_engine.h" }
1215      module uniform_int_distribution        { private header "__random/uniform_int_distribution.h" }
1216      module uniform_random_bit_generator    { private header "__random/uniform_random_bit_generator.h" }
1217      module uniform_real_distribution       { private header "__random/uniform_real_distribution.h" }
1218      module weibull_distribution            { private header "__random/weibull_distribution.h" }
1219    }
1220  }
1221  module ranges {
1222    header "ranges"
1223    export compare
1224    export initializer_list
1225    export iterator
1226    export *
1227
1228    module __ranges {
1229      module access                 { private header "__ranges/access.h" }
1230      module all                    {
1231        private header "__ranges/all.h"
1232        export functional.__functional.compose
1233        export functional.__functional.perfect_forward
1234      }
1235      module as_rvalue_view         { private header "__ranges/as_rvalue_view.h" }
1236      module common_view            { private header "__ranges/common_view.h" }
1237      module concepts               { private header "__ranges/concepts.h" }
1238      module copyable_box           { private header "__ranges/copyable_box.h" }
1239      module counted                {
1240        private header "__ranges/counted.h"
1241        export span
1242      }
1243      module dangling               { private header "__ranges/dangling.h" }
1244      module data                   { private header "__ranges/data.h" }
1245      module drop_view              { private header "__ranges/drop_view.h" }
1246      module drop_while_view        { private header "__ranges/drop_while_view.h" }
1247      module elements_view          { private header "__ranges/elements_view.h" }
1248      module empty                  { private header "__ranges/empty.h" }
1249      module empty_view             { private header "__ranges/empty_view.h" }
1250      module enable_borrowed_range  { private header "__ranges/enable_borrowed_range.h" }
1251      module enable_view            { private header "__ranges/enable_view.h" }
1252      module filter_view            { private header "__ranges/filter_view.h" }
1253      module iota_view              { private header "__ranges/iota_view.h" }
1254      module istream_view           {
1255        @requires_LIBCXX_ENABLE_LOCALIZATION@
1256        private header "__ranges/istream_view.h"
1257      }
1258      module join_view              { private header "__ranges/join_view.h" }
1259      module lazy_split_view        { private header "__ranges/lazy_split_view.h" }
1260      module non_propagating_cache  { private header "__ranges/non_propagating_cache.h" }
1261      module owning_view            { private header "__ranges/owning_view.h" }
1262      module range_adaptor          { private header "__ranges/range_adaptor.h" }
1263      module rbegin                 { private header "__ranges/rbegin.h" }
1264      module ref_view               { private header "__ranges/ref_view.h" }
1265      module rend                   { private header "__ranges/rend.h" }
1266      module reverse_view           { private header "__ranges/reverse_view.h" }
1267      module single_view            { private header "__ranges/single_view.h" }
1268      module size                   { private header "__ranges/size.h" }
1269      module split_view             { private header "__ranges/split_view.h" }
1270      module subrange               {
1271        private header "__ranges/subrange.h"
1272
1273        module subrange_fwd { private header "__fwd/subrange.h" }
1274      }
1275      module take_view              { private header "__ranges/take_view.h" }
1276      module take_while_view        { private header "__ranges/take_while_view.h" }
1277      module transform_view         {
1278        private header "__ranges/transform_view.h"
1279        export functional.__functional.bind_back
1280        export functional.__functional.perfect_forward
1281      }
1282      module view_interface         { private header "__ranges/view_interface.h" }
1283      module views                  { private header "__ranges/views.h" }
1284      module zip_view               { private header "__ranges/zip_view.h" }
1285    }
1286  }
1287  module ratio {
1288    header "ratio"
1289    export *
1290  }
1291  module regex {
1292    @requires_LIBCXX_ENABLE_LOCALIZATION@
1293    header "regex"
1294    export initializer_list
1295    export *
1296  }
1297  module scoped_allocator {
1298    header "scoped_allocator"
1299    export *
1300  }
1301  module semaphore {
1302    @requires_LIBCXX_ENABLE_THREADS@
1303    header "semaphore"
1304    export *
1305  }
1306  module set {
1307    header "set"
1308    export initializer_list
1309    export *
1310  }
1311  module shared_mutex {
1312    @requires_LIBCXX_ENABLE_THREADS@
1313    header "shared_mutex"
1314    export version
1315  }
1316  module source_location {
1317    header "source_location"
1318    export *
1319  }
1320  module span {
1321    header "span"
1322    export ranges.__ranges.enable_borrowed_range
1323    export version
1324    module span_fwd { private header "__fwd/span.h" }
1325  }
1326  module sstream {
1327    @requires_LIBCXX_ENABLE_LOCALIZATION@
1328    header "sstream"
1329    // FIXME: should re-export istream, ostream, ios, streambuf, string?
1330    export *
1331  }
1332  module stack {
1333    header "stack"
1334    export initializer_list
1335    export *
1336  }
1337  module stdexcept {
1338    header "stdexcept"
1339    export *
1340  }
1341  module streambuf {
1342    @requires_LIBCXX_ENABLE_LOCALIZATION@
1343    header "streambuf"
1344    export *
1345  }
1346  module string {
1347    header "string"
1348    export initializer_list
1349    export string_view
1350    module __string {
1351      module char_traits           { private header "__string/char_traits.h" }
1352      module extern_template_lists { private header "__string/extern_template_lists.h" }
1353      module string_fwd            { private header "__fwd/string.h" }
1354    }
1355    export *
1356  }
1357  module string_view {
1358    header "string_view"
1359    export initializer_list
1360    export *
1361    module string_view_fwd { private header "__fwd/string_view.h" }
1362  }
1363  module strstream {
1364    @requires_LIBCXX_ENABLE_LOCALIZATION@
1365    header "strstream"
1366    export *
1367  }
1368  module system_error {
1369    header "system_error"
1370    export *
1371  }
1372  module thread {
1373    @requires_LIBCXX_ENABLE_THREADS@
1374    header "thread"
1375    export *
1376
1377    module __thread {
1378      module poll_with_backoff    { private header "__thread/poll_with_backoff.h" }
1379      module timed_backoff_policy { private header "__thread/timed_backoff_policy.h" }
1380    }
1381  }
1382  module tuple {
1383    header "tuple"
1384    export *
1385
1386    module apply_cv         { private header "__tuple_dir/apply_cv.h" }
1387    module get_fwd          { private header "__fwd/get.h" }
1388    module make_tuple_types { private header "__tuple_dir/make_tuple_types.h" }
1389    module pair_like        { private header "__tuple_dir/pair_like.h" }
1390    module sfinae_helpers   { private header "__tuple_dir/sfinae_helpers.h" }
1391    module tuple_element    { private header "__tuple_dir/tuple_element.h" }
1392    module tuple_fwd        { private header "__fwd/tuple.h" }
1393    module tuple_indices    { private header "__tuple_dir/tuple_indices.h" }
1394    module tuple_like       { private header "__tuple_dir/tuple_like.h" }
1395    module tuple_like_ext   { private header "__tuple_dir/tuple_like_ext.h" }
1396    module tuple_size       { private header "__tuple_dir/tuple_size.h" }
1397    module tuple_types      { private header "__tuple_dir/tuple_types.h" }
1398  }
1399  module type_traits {
1400    header "type_traits"
1401    export functional.__functional.unwrap_ref
1402    export *
1403
1404    module add_const                           { private header "__type_traits/add_const.h" }
1405    module add_cv                              { private header "__type_traits/add_cv.h" }
1406    module add_lvalue_reference                { private header "__type_traits/add_lvalue_reference.h" }
1407    module add_pointer                         { private header "__type_traits/add_pointer.h" }
1408    module add_rvalue_reference                { private header "__type_traits/add_rvalue_reference.h" }
1409    module add_volatile                        { private header "__type_traits/add_volatile.h" }
1410    module aligned_storage                     { private header "__type_traits/aligned_storage.h" }
1411    module aligned_union                       { private header "__type_traits/aligned_union.h" }
1412    module alignment_of                        { private header "__type_traits/alignment_of.h" }
1413    module apply_cv                            { private header "__type_traits/apply_cv.h" }
1414    module can_extract_key                     { private header "__type_traits/can_extract_key.h" }
1415    module common_reference                    { private header "__type_traits/common_reference.h" }
1416    module common_type                         { private header "__type_traits/common_type.h" }
1417    module conditional                         { private header "__type_traits/conditional.h" }
1418    module conjunction                         { private header "__type_traits/conjunction.h" }
1419    module copy_cv                             { private header "__type_traits/copy_cv.h" }
1420    module copy_cvref                          { private header "__type_traits/copy_cvref.h" }
1421    module decay                               { private header "__type_traits/decay.h" }
1422    module dependent_type                      { private header "__type_traits/dependent_type.h" }
1423    module disjunction                         { private header "__type_traits/disjunction.h" }
1424    module enable_if                           { private header "__type_traits/enable_if.h" }
1425    module extent                              { private header "__type_traits/extent.h" }
1426    module has_unique_object_representation    { private header "__type_traits/has_unique_object_representation.h" }
1427    module has_virtual_destructor              { private header "__type_traits/has_virtual_destructor.h" }
1428    module integral_constant                   { private header "__type_traits/integral_constant.h" }
1429    module is_abstract                         { private header "__type_traits/is_abstract.h" }
1430    module is_aggregate                        { private header "__type_traits/is_aggregate.h" }
1431    module is_allocator                        { private header "__type_traits/is_allocator.h" }
1432    module is_always_bitcastable               { private header "__type_traits/is_always_bitcastable.h" }
1433    module is_arithmetic {
1434      private header "__type_traits/is_arithmetic.h"
1435      export integral_constant
1436    }
1437    module is_array                            {
1438      private header "__type_traits/is_array.h"
1439      export integral_constant
1440    }
1441    module is_assignable                       { private header "__type_traits/is_assignable.h" }
1442    module is_base_of                          { private header "__type_traits/is_base_of.h" }
1443    module is_bounded_array                    { private header "__type_traits/is_bounded_array.h" }
1444    module is_callable                         { private header "__type_traits/is_callable.h" }
1445    module is_char_like_type                   { private header "__type_traits/is_char_like_type.h" }
1446    module is_class                            { private header "__type_traits/is_class.h" }
1447    module is_compound                         { private header "__type_traits/is_compound.h" }
1448    module is_const                            { private header "__type_traits/is_const.h" }
1449    module is_constant_evaluated               { private header "__type_traits/is_constant_evaluated.h" }
1450    module is_constructible                    { private header "__type_traits/is_constructible.h" }
1451    module is_convertible                      { private header "__type_traits/is_convertible.h" }
1452    module is_copy_assignable                  { private header "__type_traits/is_copy_assignable.h" }
1453    module is_copy_constructible               { private header "__type_traits/is_copy_constructible.h" }
1454    module is_core_convertible                 {
1455      private header "__type_traits/is_core_convertible.h"
1456      export integral_constant
1457    }
1458    module is_default_constructible            { private header "__type_traits/is_default_constructible.h" }
1459    module is_destructible                     { private header "__type_traits/is_destructible.h" }
1460    module is_empty                            { private header "__type_traits/is_empty.h" }
1461    module is_enum                             { private header "__type_traits/is_enum.h" }
1462    module is_final                            { private header "__type_traits/is_final.h" }
1463    module is_floating_point                   { private header "__type_traits/is_floating_point.h" }
1464    module is_function                         { private header "__type_traits/is_function.h" }
1465    module is_fundamental                      { private header "__type_traits/is_fundamental.h" }
1466    module is_implicitly_default_constructible { private header "__type_traits/is_implicitly_default_constructible.h" }
1467    module is_integral                         { private header "__type_traits/is_integral.h" }
1468    module is_literal_type                     { private header "__type_traits/is_literal_type.h" }
1469    module is_member_function_pointer          { private header "__type_traits/is_member_function_pointer.h" }
1470    module is_member_object_pointer            { private header "__type_traits/is_member_object_pointer.h" }
1471    module is_member_pointer                   { private header "__type_traits/is_member_pointer.h" }
1472    module is_move_assignable                  { private header "__type_traits/is_move_assignable.h" }
1473    module is_move_constructible               { private header "__type_traits/is_move_constructible.h" }
1474    module is_nothrow_assignable               { private header "__type_traits/is_nothrow_assignable.h" }
1475    module is_nothrow_constructible            { private header "__type_traits/is_nothrow_constructible.h" }
1476    module is_nothrow_convertible              { private header "__type_traits/is_nothrow_convertible.h" }
1477    module is_nothrow_copy_assignable          { private header "__type_traits/is_nothrow_copy_assignable.h" }
1478    module is_nothrow_copy_constructible       { private header "__type_traits/is_nothrow_copy_constructible.h" }
1479    module is_nothrow_default_constructible    { private header "__type_traits/is_nothrow_default_constructible.h" }
1480    module is_nothrow_destructible             { private header "__type_traits/is_nothrow_destructible.h" }
1481    module is_nothrow_move_assignable          { private header "__type_traits/is_nothrow_move_assignable.h" }
1482    module is_nothrow_move_constructible       { private header "__type_traits/is_nothrow_move_constructible.h" }
1483    module is_null_pointer                     { private header "__type_traits/is_null_pointer.h" }
1484    module is_object                           { private header "__type_traits/is_object.h" }
1485    module is_pod                              { private header "__type_traits/is_pod.h" }
1486    module is_pointer                          { private header "__type_traits/is_pointer.h" }
1487    module is_polymorphic                      { private header "__type_traits/is_polymorphic.h" }
1488    module is_primary_template                 { private header "__type_traits/is_primary_template.h" }
1489    module is_reference                        { private header "__type_traits/is_reference.h" }
1490    module is_reference_wrapper                { private header "__type_traits/is_reference_wrapper.h" }
1491    module is_referenceable                    { private header "__type_traits/is_referenceable.h" }
1492    module is_same                             {
1493      private header "__type_traits/is_same.h"
1494      export type_traits.integral_constant
1495    }
1496    module is_scalar                           { private header "__type_traits/is_scalar.h" }
1497    module is_scoped_enum                      { private header "__type_traits/is_scoped_enum.h" }
1498    module is_signed                           { private header "__type_traits/is_signed.h" }
1499    module is_signed_integer                   { private header "__type_traits/is_signed_integer.h" }
1500    module is_specialization                   { private header "__type_traits/is_specialization.h" }
1501    module is_standard_layout                  { private header "__type_traits/is_standard_layout.h" }
1502    module is_swappable                        { private header "__type_traits/is_swappable.h" }
1503    module is_trivial                          { private header "__type_traits/is_trivial.h" }
1504    module is_trivially_assignable             { private header "__type_traits/is_trivially_assignable.h" }
1505    module is_trivially_constructible          { private header "__type_traits/is_trivially_constructible.h" }
1506    module is_trivially_copy_assignable        { private header "__type_traits/is_trivially_copy_assignable.h" }
1507    module is_trivially_copy_constructible     { private header "__type_traits/is_trivially_copy_constructible.h" }
1508    module is_trivially_copyable               { private header "__type_traits/is_trivially_copyable.h" }
1509    module is_trivially_default_constructible  { private header "__type_traits/is_trivially_default_constructible.h" }
1510    module is_trivially_destructible           { private header "__type_traits/is_trivially_destructible.h" }
1511    module is_trivially_move_assignable        { private header "__type_traits/is_trivially_move_assignable.h" }
1512    module is_trivially_move_constructible     { private header "__type_traits/is_trivially_move_constructible.h" }
1513    module is_unbounded_array                  { private header "__type_traits/is_unbounded_array.h" }
1514    module is_union                            { private header "__type_traits/is_union.h" }
1515    module is_unsigned                         { private header "__type_traits/is_unsigned.h" }
1516    module is_unsigned_integer                 { private header "__type_traits/is_unsigned_integer.h" }
1517    module is_valid_expansion                  { private header "__type_traits/is_valid_expansion.h" }
1518    module is_void                             {
1519      private header "__type_traits/is_void.h"
1520      export integral_constant
1521    }
1522    module is_volatile                         { private header "__type_traits/is_volatile.h" }
1523    module lazy                                { private header "__type_traits/lazy.h" }
1524    module make_32_64_or_128_bit               { private header "__type_traits/make_32_64_or_128_bit.h" }
1525    module make_const_lvalue_ref               { private header "__type_traits/make_const_lvalue_ref.h" }
1526    module make_signed                         { private header "__type_traits/make_signed.h" }
1527    module make_unsigned                       { private header "__type_traits/make_unsigned.h" }
1528    module maybe_const                         { private header "__type_traits/maybe_const.h" }
1529    module nat                                 { private header "__type_traits/nat.h" }
1530    module negation                            { private header "__type_traits/negation.h" }
1531    module noexcept_move_assign_container      { private header "__type_traits/noexcept_move_assign_container.h" }
1532    module promote                             { private header "__type_traits/promote.h" }
1533    module rank                                { private header "__type_traits/rank.h" }
1534    module remove_all_extents                  { private header "__type_traits/remove_all_extents.h" }
1535    module remove_const                        { private header "__type_traits/remove_const.h" }
1536    module remove_const_ref                    { private header "__type_traits/remove_const_ref.h" }
1537    module remove_cv                           { private header "__type_traits/remove_cv.h" }
1538    module remove_cvref                        { private header "__type_traits/remove_cvref.h" }
1539    module remove_extent                       { private header "__type_traits/remove_extent.h" }
1540    module remove_pointer                      { private header "__type_traits/remove_pointer.h" }
1541    module remove_reference                    { private header "__type_traits/remove_reference.h" }
1542    module remove_volatile                     { private header "__type_traits/remove_volatile.h" }
1543    module result_of                           { private header "__type_traits/result_of.h" }
1544    module strip_signature                     { private header "__type_traits/strip_signature.h" }
1545    module type_identity                       { private header "__type_traits/type_identity.h" }
1546    module type_list                           { private header "__type_traits/type_list.h" }
1547    module underlying_type                     { private header "__type_traits/underlying_type.h" }
1548    module void_t                              { private header "__type_traits/void_t.h" }
1549  }
1550  module typeindex {
1551    header "typeindex"
1552    export *
1553  }
1554  module typeinfo {
1555    header "typeinfo"
1556    export *
1557  }
1558  module unordered_map {
1559    header "unordered_map"
1560    export initializer_list
1561    export *
1562  }
1563  module unordered_set {
1564    header "unordered_set"
1565    export initializer_list
1566    export *
1567  }
1568  module utility {
1569    header "utility"
1570    export initializer_list
1571    export *
1572
1573    module __utility {
1574      module as_const            { private header "__utility/as_const.h" }
1575      module auto_cast           { private header "__utility/auto_cast.h" }
1576      module cmp                 { private header "__utility/cmp.h" }
1577      module convert_to_integral { private header "__utility/convert_to_integral.h" }
1578      module declval             { private header "__utility/declval.h" }
1579      module exception_guard     { private header "__utility/exception_guard.h" }
1580      module exchange            { private header "__utility/exchange.h" }
1581      module forward             { private header "__utility/forward.h" }
1582      module forward_like        { private header "__utility/forward_like.h" }
1583      module in_place            { private header "__utility/in_place.h" }
1584      module integer_sequence    { private header "__utility/integer_sequence.h" }
1585      module move                { private header "__utility/move.h" }
1586      module pair                { private header "__utility/pair.h" }
1587      module pair_fwd            { private header "__fwd/pair.h" }
1588      module piecewise_construct { private header "__utility/piecewise_construct.h" }
1589      module priority_tag        { private header "__utility/priority_tag.h" }
1590      module rel_ops             { private header "__utility/rel_ops.h" }
1591      module swap                { private header "__utility/swap.h" }
1592      module to_underlying       { private header "__utility/to_underlying.h" }
1593      module unreachable         { private header "__utility/unreachable.h" }
1594    }
1595  }
1596  module valarray {
1597    header "valarray"
1598    export initializer_list
1599    export *
1600  }
1601  module variant {
1602    header "variant"
1603    export *
1604
1605    module __variant {
1606      module monostate { private header "__variant/monostate.h" }
1607    }
1608  }
1609  module vector {
1610    header "vector"
1611    export initializer_list
1612    export *
1613  }
1614  module version {
1615    header "version"
1616    export *
1617  }
1618
1619  // FIXME: These should be private.
1620  module __assert            {         header "__assert"            export * }
1621  module __availability      { private header "__availability"      export * }
1622  module __bit_reference     { private header "__bit_reference"     export * }
1623  module __debug             {         header "__debug"             export * }
1624  module __errc              { private header "__errc"              export * }
1625  module __hash_table        {         header "__hash_table"        export * }
1626  module __locale            {
1627    @requires_LIBCXX_ENABLE_LOCALIZATION@
1628    private header "__locale" export *
1629  }
1630  module __mbstate_t         { private header "__mbstate_t.h"       export * }
1631  module __mutex_base        { private header "__mutex_base"        export * }
1632  module __node_handle       { private header "__node_handle"       export * }
1633  module __split_buffer      { private header "__split_buffer"      export * }
1634  module __std_stream        {
1635    @requires_LIBCXX_ENABLE_LOCALIZATION@
1636    private header "__std_stream" export *
1637  }
1638  module __threading_support {         header "__threading_support" export * }
1639  module __tree              {         header "__tree"              export * }
1640  module __undef_macros      {         header "__undef_macros"      export * }
1641  module __verbose_abort     {         header "__verbose_abort"     export * }
1642
1643  module experimental {
1644    requires cplusplus11
1645
1646    module algorithm {
1647      header "experimental/algorithm"
1648      export *
1649    }
1650    module coroutine {
1651      requires coroutines
1652      header "experimental/coroutine"
1653      export *
1654    }
1655    module deque {
1656      header "experimental/deque"
1657      export *
1658    }
1659    module forward_list {
1660      header "experimental/forward_list"
1661      export *
1662    }
1663    module functional {
1664      header "experimental/functional"
1665      export *
1666    }
1667    module iterator {
1668      header "experimental/iterator"
1669      export *
1670    }
1671    module list {
1672      header "experimental/list"
1673      export *
1674    }
1675    module map {
1676      header "experimental/map"
1677      export *
1678    }
1679    module memory_resource {
1680      header "experimental/memory_resource"
1681      export *
1682    }
1683    module propagate_const {
1684      header "experimental/propagate_const"
1685      export *
1686    }
1687    module regex {
1688      @requires_LIBCXX_ENABLE_LOCALIZATION@
1689      header "experimental/regex"
1690      export *
1691    }
1692    module simd {
1693      header "experimental/simd"
1694      export *
1695    }
1696    module set {
1697      header "experimental/set"
1698      export *
1699    }
1700    module span {
1701      header "span"
1702      export *
1703    }
1704    module string {
1705      header "experimental/string"
1706      export *
1707    }
1708    module type_traits {
1709      header "experimental/type_traits"
1710      export *
1711    }
1712    module unordered_map {
1713      header "experimental/unordered_map"
1714      export *
1715    }
1716    module unordered_set {
1717      header "experimental/unordered_set"
1718      export *
1719    }
1720    module utility {
1721      header "experimental/utility"
1722      export *
1723    }
1724    module vector {
1725      header "experimental/vector"
1726      export *
1727    }
1728    // FIXME these should be private
1729    module __memory {
1730      header "experimental/__memory"
1731      export *
1732    }
1733  } // end experimental
1734}
1735