1aed8d94eSDimitry Andric// define the module for __config outside of the top level 'std' module
2aed8d94eSDimitry Andric// since __config may be included from C headers which may create an
3aed8d94eSDimitry Andric// include cycle.
4aed8d94eSDimitry Andricmodule std_config [system] [extern_c] {
5aed8d94eSDimitry Andric    header "__config"
6aed8d94eSDimitry Andric}
7aed8d94eSDimitry Andric
8d72607e9SDimitry Andricmodule std [system] {
9aed8d94eSDimitry Andric  export std_config
10d72607e9SDimitry Andric  // FIXME: The standard does not require that each of these submodules
11d72607e9SDimitry Andric  // re-exports its imported modules. We should provide an alternative form of
12d72607e9SDimitry Andric  // export that issues a warning if a name from the submodule is used, and
13d72607e9SDimitry Andric  // use that to provide a 'strict mode' for libc++.
14aed8d94eSDimitry Andric
15aed8d94eSDimitry Andric  // Deprecated C-compatibility headers. These can all be included from within
16aed8d94eSDimitry Andric  // an 'extern "C"' context.
17aed8d94eSDimitry Andric  module depr [extern_c] {
18aed8d94eSDimitry Andric    // <assert.h> provided by C library.
19aed8d94eSDimitry Andric    module ctype_h {
20aed8d94eSDimitry Andric      header "ctype.h"
21d72607e9SDimitry Andric      export *
22d72607e9SDimitry Andric    }
23aed8d94eSDimitry Andric    module errno_h {
24aed8d94eSDimitry Andric      header "errno.h"
25d72607e9SDimitry Andric      export *
26d72607e9SDimitry Andric    }
27aed8d94eSDimitry Andric    // <fenv.h> provided by C library.
28aed8d94eSDimitry Andric    // <float.h> provided by compiler or C library.
29aed8d94eSDimitry Andric    module inttypes_h {
30aed8d94eSDimitry Andric      header "inttypes.h"
31aed8d94eSDimitry Andric      export stdint_h
32d72607e9SDimitry Andric      export *
33d72607e9SDimitry Andric    }
34aed8d94eSDimitry Andric    // <iso646.h> provided by compiler.
35aed8d94eSDimitry Andric    // <limits.h> provided by compiler or C library.
36aed8d94eSDimitry Andric    module locale_h {
37aed8d94eSDimitry Andric      header "locale.h"
38aed8d94eSDimitry Andric      export *
39aed8d94eSDimitry Andric    }
40aed8d94eSDimitry Andric    module math_h {
41aed8d94eSDimitry Andric      header "math.h"
42aed8d94eSDimitry Andric      export *
43aed8d94eSDimitry Andric    }
44aed8d94eSDimitry Andric    module setjmp_h {
45aed8d94eSDimitry Andric      header "setjmp.h"
46aed8d94eSDimitry Andric      export *
47aed8d94eSDimitry Andric    }
48aed8d94eSDimitry Andric    // FIXME: <stdalign.h> is missing.
49aed8d94eSDimitry Andric    // <signal.h> provided by C library.
50aed8d94eSDimitry Andric    // <stdarg.h> provided by compiler.
51aed8d94eSDimitry Andric    // <stdbool.h> provided by compiler.
52aed8d94eSDimitry Andric    module stddef_h {
53aed8d94eSDimitry Andric      // <stddef.h>'s __need_* macros require textual inclusion.
54aed8d94eSDimitry Andric      textual header "stddef.h"
55aed8d94eSDimitry Andric    }
56aed8d94eSDimitry Andric    module stdint_h {
57aed8d94eSDimitry Andric      header "stdint.h"
58aed8d94eSDimitry Andric      export *
59aed8d94eSDimitry Andric      // FIXME: This module only exists on OS X and for some reason the
60aed8d94eSDimitry Andric      // wildcard above doesn't export it.
61aed8d94eSDimitry Andric      export Darwin.C.stdint
62aed8d94eSDimitry Andric    }
63aed8d94eSDimitry Andric    module stdio_h {
64aed8d94eSDimitry Andric      // <stdio.h>'s __need_* macros require textual inclusion.
65aed8d94eSDimitry Andric      textual header "stdio.h"
66aed8d94eSDimitry Andric      export *
67aed8d94eSDimitry Andric      export Darwin.C.stdio
68aed8d94eSDimitry Andric    }
69aed8d94eSDimitry Andric    module stdlib_h {
70aed8d94eSDimitry Andric      // <stdlib.h>'s __need_* macros require textual inclusion.
71aed8d94eSDimitry Andric      textual header "stdlib.h"
72aed8d94eSDimitry Andric      export *
73aed8d94eSDimitry Andric    }
74aed8d94eSDimitry Andric    module string_h {
75aed8d94eSDimitry Andric      header "string.h"
76aed8d94eSDimitry Andric      export *
77aed8d94eSDimitry Andric    }
78aed8d94eSDimitry Andric    // FIXME: <uchar.h> is missing.
79aed8d94eSDimitry Andric    // <time.h> provided by C library.
80aed8d94eSDimitry Andric    module wchar_h {
81aed8d94eSDimitry Andric      // <wchar.h>'s __need_* macros require textual inclusion.
82aed8d94eSDimitry Andric      textual header "wchar.h"
83aed8d94eSDimitry Andric      export *
84aed8d94eSDimitry Andric    }
85aed8d94eSDimitry Andric    module wctype_h {
86aed8d94eSDimitry Andric      header "wctype.h"
87aed8d94eSDimitry Andric      export *
88aed8d94eSDimitry Andric    }
89aed8d94eSDimitry Andric  }
90aed8d94eSDimitry Andric
91aed8d94eSDimitry Andric  // <complex.h> and <tgmath.h> are not C headers in any real sense, do not
92aed8d94eSDimitry Andric  // allow their use in extern "C" contexts.
93aed8d94eSDimitry Andric  module complex_h {
94aed8d94eSDimitry Andric    header "complex.h"
95aed8d94eSDimitry Andric    export ccomplex
96aed8d94eSDimitry Andric    export *
97aed8d94eSDimitry Andric  }
98aed8d94eSDimitry Andric  module tgmath_h {
99aed8d94eSDimitry Andric    header "tgmath.h"
100aed8d94eSDimitry Andric    export ccomplex
101aed8d94eSDimitry Andric    export cmath
102aed8d94eSDimitry Andric    export *
103aed8d94eSDimitry Andric  }
104aed8d94eSDimitry Andric
105aed8d94eSDimitry Andric  // C compatibility headers.
106aed8d94eSDimitry Andric  module compat {
107aed8d94eSDimitry Andric    module cassert {
108aed8d94eSDimitry Andric      // <cassert>'s use of NDEBUG requires textual inclusion.
109aed8d94eSDimitry Andric      textual header "cassert"
110aed8d94eSDimitry Andric    }
111d72607e9SDimitry Andric    module ccomplex {
112d72607e9SDimitry Andric      header "ccomplex"
113d72607e9SDimitry Andric      export complex
114d72607e9SDimitry Andric      export *
115d72607e9SDimitry Andric    }
116d72607e9SDimitry Andric    module cctype {
117d72607e9SDimitry Andric      header "cctype"
118d72607e9SDimitry Andric      export *
119d72607e9SDimitry Andric    }
120d72607e9SDimitry Andric    module cerrno {
121d72607e9SDimitry Andric      header "cerrno"
122d72607e9SDimitry Andric      export *
123d72607e9SDimitry Andric    }
124d72607e9SDimitry Andric    module cfenv {
125d72607e9SDimitry Andric      header "cfenv"
126d72607e9SDimitry Andric      export *
127d72607e9SDimitry Andric    }
128d72607e9SDimitry Andric    module cfloat {
129d72607e9SDimitry Andric      header "cfloat"
130d72607e9SDimitry Andric      export *
131d72607e9SDimitry Andric    }
132d72607e9SDimitry Andric    module cinttypes {
133d72607e9SDimitry Andric      header "cinttypes"
134d72607e9SDimitry Andric      export cstdint
135d72607e9SDimitry Andric      export *
136d72607e9SDimitry Andric    }
137d72607e9SDimitry Andric    module ciso646 {
138d72607e9SDimitry Andric      header "ciso646"
139d72607e9SDimitry Andric      export *
140d72607e9SDimitry Andric    }
141d72607e9SDimitry Andric    module climits {
142d72607e9SDimitry Andric      header "climits"
143d72607e9SDimitry Andric      export *
144d72607e9SDimitry Andric    }
145d72607e9SDimitry Andric    module clocale {
146d72607e9SDimitry Andric      header "clocale"
147d72607e9SDimitry Andric      export *
148d72607e9SDimitry Andric    }
149d72607e9SDimitry Andric    module cmath {
150d72607e9SDimitry Andric      header "cmath"
151aed8d94eSDimitry Andric      export *
152aed8d94eSDimitry Andric    }
153aed8d94eSDimitry Andric    module csetjmp {
154aed8d94eSDimitry Andric      header "csetjmp"
155aed8d94eSDimitry Andric      export *
156aed8d94eSDimitry Andric    }
157aed8d94eSDimitry Andric    module csignal {
158aed8d94eSDimitry Andric      header "csignal"
159aed8d94eSDimitry Andric      export *
160aed8d94eSDimitry Andric    }
161aed8d94eSDimitry Andric    // FIXME: <cstdalign> is missing.
162aed8d94eSDimitry Andric    module cstdarg {
163aed8d94eSDimitry Andric      header "cstdarg"
164aed8d94eSDimitry Andric      export *
165aed8d94eSDimitry Andric    }
166aed8d94eSDimitry Andric    module cstdbool {
167aed8d94eSDimitry Andric      header "cstdbool"
168aed8d94eSDimitry Andric      export *
169aed8d94eSDimitry Andric    }
170aed8d94eSDimitry Andric    module cstddef {
171aed8d94eSDimitry Andric      header "cstddef"
172aed8d94eSDimitry Andric      export *
173aed8d94eSDimitry Andric    }
174aed8d94eSDimitry Andric    module cstdint {
175aed8d94eSDimitry Andric      header "cstdint"
176aed8d94eSDimitry Andric      export depr.stdint_h
177aed8d94eSDimitry Andric      export *
178aed8d94eSDimitry Andric    }
179aed8d94eSDimitry Andric    module cstdio {
180aed8d94eSDimitry Andric      header "cstdio"
181aed8d94eSDimitry Andric      export *
182aed8d94eSDimitry Andric    }
183aed8d94eSDimitry Andric    module cstdlib {
184aed8d94eSDimitry Andric      header "cstdlib"
185aed8d94eSDimitry Andric      export *
186aed8d94eSDimitry Andric    }
187aed8d94eSDimitry Andric    module cstring {
188aed8d94eSDimitry Andric      header "cstring"
189aed8d94eSDimitry Andric      export *
190aed8d94eSDimitry Andric    }
191aed8d94eSDimitry Andric    module ctgmath {
192aed8d94eSDimitry Andric      header "ctgmath"
193aed8d94eSDimitry Andric      export ccomplex
194aed8d94eSDimitry Andric      export cmath
195aed8d94eSDimitry Andric      export *
196aed8d94eSDimitry Andric    }
197aed8d94eSDimitry Andric    module ctime {
198aed8d94eSDimitry Andric      header "ctime"
199aed8d94eSDimitry Andric      export *
200aed8d94eSDimitry Andric    }
201aed8d94eSDimitry Andric    // FIXME: <cuchar> is missing.
202aed8d94eSDimitry Andric    module cwchar {
203aed8d94eSDimitry Andric      header "cwchar"
204aed8d94eSDimitry Andric      export depr.stdio_h
205aed8d94eSDimitry Andric      export *
206aed8d94eSDimitry Andric    }
207aed8d94eSDimitry Andric    module cwctype {
208aed8d94eSDimitry Andric      header "cwctype"
209aed8d94eSDimitry Andric      export *
210aed8d94eSDimitry Andric    }
211aed8d94eSDimitry Andric  }
212aed8d94eSDimitry Andric
213aed8d94eSDimitry Andric  module algorithm {
214aed8d94eSDimitry Andric    header "algorithm"
215aed8d94eSDimitry Andric    export initializer_list
216aed8d94eSDimitry Andric    export *
217aed8d94eSDimitry Andric  }
218aed8d94eSDimitry Andric  module any {
219aed8d94eSDimitry Andric    header "any"
220aed8d94eSDimitry Andric    export *
221aed8d94eSDimitry Andric  }
222aed8d94eSDimitry Andric  module array {
223aed8d94eSDimitry Andric    header "array"
224aed8d94eSDimitry Andric    export initializer_list
225aed8d94eSDimitry Andric    export *
226aed8d94eSDimitry Andric  }
227aed8d94eSDimitry Andric  module atomic {
228aed8d94eSDimitry Andric    header "atomic"
229aed8d94eSDimitry Andric    export *
230aed8d94eSDimitry Andric  }
231*b5893f02SDimitry Andric  module bit {
232*b5893f02SDimitry Andric    header "bit"
233*b5893f02SDimitry Andric    export *
234*b5893f02SDimitry Andric  }
235aed8d94eSDimitry Andric  module bitset {
236aed8d94eSDimitry Andric    header "bitset"
237aed8d94eSDimitry Andric    export string
238aed8d94eSDimitry Andric    export iosfwd
239aed8d94eSDimitry Andric    export *
240aed8d94eSDimitry Andric  }
241aed8d94eSDimitry Andric  // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
2424ba319b5SDimitry Andric  module charconv {
2434ba319b5SDimitry Andric    header "charconv"
2444ba319b5SDimitry Andric    export *
2454ba319b5SDimitry Andric  }
246aed8d94eSDimitry Andric  module chrono {
247aed8d94eSDimitry Andric    header "chrono"
248d72607e9SDimitry Andric    export *
249d72607e9SDimitry Andric  }
250d72607e9SDimitry Andric  module codecvt {
251d72607e9SDimitry Andric    header "codecvt"
252d72607e9SDimitry Andric    export *
253d72607e9SDimitry Andric  }
2544ba319b5SDimitry Andric  module compare {
2554ba319b5SDimitry Andric    header "compare"
2564ba319b5SDimitry Andric    export *
2574ba319b5SDimitry Andric  }
258d72607e9SDimitry Andric  module complex {
259d72607e9SDimitry Andric    header "complex"
260d72607e9SDimitry Andric    export *
261d72607e9SDimitry Andric  }
262d72607e9SDimitry Andric  module condition_variable {
263d72607e9SDimitry Andric    header "condition_variable"
264d72607e9SDimitry Andric    export *
265d72607e9SDimitry Andric  }
266d72607e9SDimitry Andric  module deque {
267d72607e9SDimitry Andric    header "deque"
268d72607e9SDimitry Andric    export initializer_list
269d72607e9SDimitry Andric    export *
270d72607e9SDimitry Andric  }
271d72607e9SDimitry Andric  module exception {
272d72607e9SDimitry Andric    header "exception"
273d72607e9SDimitry Andric    export *
274d72607e9SDimitry Andric  }
2754ba319b5SDimitry Andric  module filesystem {
2764ba319b5SDimitry Andric    header "filesystem"
2774ba319b5SDimitry Andric    export *
2784ba319b5SDimitry Andric  }
279d72607e9SDimitry Andric  module forward_list {
280d72607e9SDimitry Andric    header "forward_list"
281d72607e9SDimitry Andric    export initializer_list
282d72607e9SDimitry Andric    export *
283d72607e9SDimitry Andric  }
284d72607e9SDimitry Andric  module fstream {
285d72607e9SDimitry Andric    header "fstream"
286d72607e9SDimitry Andric    export *
287d72607e9SDimitry Andric  }
288d72607e9SDimitry Andric  module functional {
289d72607e9SDimitry Andric    header "functional"
290d72607e9SDimitry Andric    export *
291d72607e9SDimitry Andric  }
292d72607e9SDimitry Andric  module future {
293d72607e9SDimitry Andric    header "future"
294d72607e9SDimitry Andric    export *
295d72607e9SDimitry Andric  }
296d72607e9SDimitry Andric  module initializer_list {
297d72607e9SDimitry Andric    header "initializer_list"
298d72607e9SDimitry Andric    export *
299d72607e9SDimitry Andric  }
300d72607e9SDimitry Andric  module iomanip {
301d72607e9SDimitry Andric    header "iomanip"
302d72607e9SDimitry Andric    export *
303d72607e9SDimitry Andric  }
304d72607e9SDimitry Andric  module ios {
305d72607e9SDimitry Andric    header "ios"
306d72607e9SDimitry Andric    export iosfwd
307d72607e9SDimitry Andric    export *
308d72607e9SDimitry Andric  }
309d72607e9SDimitry Andric  module iosfwd {
310d72607e9SDimitry Andric    header "iosfwd"
311d72607e9SDimitry Andric    export *
312d72607e9SDimitry Andric  }
313d72607e9SDimitry Andric  module iostream {
314d72607e9SDimitry Andric    header "iostream"
315d72607e9SDimitry Andric    export ios
316d72607e9SDimitry Andric    export streambuf
317d72607e9SDimitry Andric    export istream
318d72607e9SDimitry Andric    export ostream
319d72607e9SDimitry Andric    export *
320d72607e9SDimitry Andric  }
321d72607e9SDimitry Andric  module istream {
322d72607e9SDimitry Andric    header "istream"
323d72607e9SDimitry Andric    // FIXME: should re-export ios, streambuf?
324d72607e9SDimitry Andric    export *
325d72607e9SDimitry Andric  }
326d72607e9SDimitry Andric  module iterator {
327d72607e9SDimitry Andric    header "iterator"
328d72607e9SDimitry Andric    export *
329d72607e9SDimitry Andric  }
330d72607e9SDimitry Andric  module limits {
331d72607e9SDimitry Andric    header "limits"
332d72607e9SDimitry Andric    export *
333d72607e9SDimitry Andric  }
334d72607e9SDimitry Andric  module list {
335d72607e9SDimitry Andric    header "list"
336d72607e9SDimitry Andric    export initializer_list
337d72607e9SDimitry Andric    export *
338d72607e9SDimitry Andric  }
339d72607e9SDimitry Andric  module locale {
340d72607e9SDimitry Andric    header "locale"
341d72607e9SDimitry Andric    export *
342d72607e9SDimitry Andric  }
343d72607e9SDimitry Andric  module map {
344d72607e9SDimitry Andric    header "map"
345d72607e9SDimitry Andric    export initializer_list
346d72607e9SDimitry Andric    export *
347d72607e9SDimitry Andric  }
348d72607e9SDimitry Andric  module memory {
349d72607e9SDimitry Andric    header "memory"
350d72607e9SDimitry Andric    export *
351d72607e9SDimitry Andric  }
352d72607e9SDimitry Andric  module mutex {
353d72607e9SDimitry Andric    header "mutex"
354d72607e9SDimitry Andric    export *
355d72607e9SDimitry Andric  }
356d72607e9SDimitry Andric  module new {
357d72607e9SDimitry Andric    header "new"
358d72607e9SDimitry Andric    export *
359d72607e9SDimitry Andric  }
360d72607e9SDimitry Andric  module numeric {
361d72607e9SDimitry Andric    header "numeric"
362d72607e9SDimitry Andric    export *
363d72607e9SDimitry Andric  }
364aed8d94eSDimitry Andric  module optional {
365aed8d94eSDimitry Andric    header "optional"
366aed8d94eSDimitry Andric    export *
367aed8d94eSDimitry Andric  }
368d72607e9SDimitry Andric  module ostream {
369d72607e9SDimitry Andric    header "ostream"
370d72607e9SDimitry Andric    // FIXME: should re-export ios, streambuf?
371d72607e9SDimitry Andric    export *
372d72607e9SDimitry Andric  }
373d72607e9SDimitry Andric  module queue {
374d72607e9SDimitry Andric    header "queue"
375d72607e9SDimitry Andric    export initializer_list
376d72607e9SDimitry Andric    export *
377d72607e9SDimitry Andric  }
378d72607e9SDimitry Andric  module random {
379d72607e9SDimitry Andric    header "random"
380d72607e9SDimitry Andric    export initializer_list
381d72607e9SDimitry Andric    export *
382d72607e9SDimitry Andric  }
383d72607e9SDimitry Andric  module ratio {
384d72607e9SDimitry Andric    header "ratio"
385d72607e9SDimitry Andric    export *
386d72607e9SDimitry Andric  }
387d72607e9SDimitry Andric  module regex {
388d72607e9SDimitry Andric    header "regex"
389d72607e9SDimitry Andric    export initializer_list
390d72607e9SDimitry Andric    export *
391d72607e9SDimitry Andric  }
392d72607e9SDimitry Andric  module scoped_allocator {
393d72607e9SDimitry Andric    header "scoped_allocator"
394d72607e9SDimitry Andric    export *
395d72607e9SDimitry Andric  }
396d72607e9SDimitry Andric  module set {
397d72607e9SDimitry Andric    header "set"
398d72607e9SDimitry Andric    export initializer_list
399d72607e9SDimitry Andric    export *
400d72607e9SDimitry Andric  }
401d72607e9SDimitry Andric  module sstream {
402d72607e9SDimitry Andric    header "sstream"
403d72607e9SDimitry Andric    // FIXME: should re-export istream, ostream, ios, streambuf, string?
404d72607e9SDimitry Andric    export *
405d72607e9SDimitry Andric  }
406d72607e9SDimitry Andric  module stack {
407d72607e9SDimitry Andric    header "stack"
408d72607e9SDimitry Andric    export initializer_list
409d72607e9SDimitry Andric    export *
410d72607e9SDimitry Andric  }
411d72607e9SDimitry Andric  module stdexcept {
412d72607e9SDimitry Andric    header "stdexcept"
413d72607e9SDimitry Andric    export *
414d72607e9SDimitry Andric  }
415d72607e9SDimitry Andric  module streambuf {
416d72607e9SDimitry Andric    header "streambuf"
417d72607e9SDimitry Andric    export *
418d72607e9SDimitry Andric  }
419d72607e9SDimitry Andric  module string {
420d72607e9SDimitry Andric    header "string"
421d72607e9SDimitry Andric    export initializer_list
422aed8d94eSDimitry Andric    export string_view
423aed8d94eSDimitry Andric    export __string
424aed8d94eSDimitry Andric    export *
425aed8d94eSDimitry Andric  }
426aed8d94eSDimitry Andric  module string_view {
427aed8d94eSDimitry Andric    header "string_view"
428aed8d94eSDimitry Andric    export initializer_list
429aed8d94eSDimitry Andric    export __string
430d72607e9SDimitry Andric    export *
431d72607e9SDimitry Andric  }
432d72607e9SDimitry Andric  module strstream {
433d72607e9SDimitry Andric    header "strstream"
434aed8d94eSDimitry Andric    export *
435d72607e9SDimitry Andric  }
436d72607e9SDimitry Andric  module system_error {
437d72607e9SDimitry Andric    header "system_error"
438d72607e9SDimitry Andric    export *
439d72607e9SDimitry Andric  }
440d72607e9SDimitry Andric  module thread {
441d72607e9SDimitry Andric    header "thread"
442d72607e9SDimitry Andric    export *
443d72607e9SDimitry Andric  }
444d72607e9SDimitry Andric  module tuple {
445d72607e9SDimitry Andric    header "tuple"
446d72607e9SDimitry Andric    export *
447d72607e9SDimitry Andric  }
448d72607e9SDimitry Andric  module type_traits {
449d72607e9SDimitry Andric    header "type_traits"
450d72607e9SDimitry Andric    export *
451d72607e9SDimitry Andric  }
452d72607e9SDimitry Andric  module typeindex {
453d72607e9SDimitry Andric    header "typeindex"
454d72607e9SDimitry Andric    export *
455d72607e9SDimitry Andric  }
456d72607e9SDimitry Andric  module typeinfo {
457d72607e9SDimitry Andric    header "typeinfo"
458d72607e9SDimitry Andric    export *
459d72607e9SDimitry Andric  }
460d72607e9SDimitry Andric  module unordered_map {
461d72607e9SDimitry Andric    header "unordered_map"
462d72607e9SDimitry Andric    export initializer_list
463d72607e9SDimitry Andric    export *
464d72607e9SDimitry Andric  }
465d72607e9SDimitry Andric  module unordered_set {
466d72607e9SDimitry Andric    header "unordered_set"
467d72607e9SDimitry Andric    export initializer_list
468d72607e9SDimitry Andric    export *
469d72607e9SDimitry Andric  }
470d72607e9SDimitry Andric  module utility {
471d72607e9SDimitry Andric    header "utility"
472d72607e9SDimitry Andric    export initializer_list
473d72607e9SDimitry Andric    export *
474d72607e9SDimitry Andric  }
475d72607e9SDimitry Andric  module valarray {
476d72607e9SDimitry Andric    header "valarray"
477d72607e9SDimitry Andric    export initializer_list
478d72607e9SDimitry Andric    export *
479d72607e9SDimitry Andric  }
480aed8d94eSDimitry Andric  module variant {
481aed8d94eSDimitry Andric    header "variant"
482aed8d94eSDimitry Andric    export *
483aed8d94eSDimitry Andric  }
484d72607e9SDimitry Andric  module vector {
485d72607e9SDimitry Andric    header "vector"
486d72607e9SDimitry Andric    export initializer_list
487d72607e9SDimitry Andric    export *
488d72607e9SDimitry Andric  }
4894ba319b5SDimitry Andric  module version {
4904ba319b5SDimitry Andric    header "version"
4914ba319b5SDimitry Andric    export *
4924ba319b5SDimitry Andric  }
493d72607e9SDimitry Andric
494d72607e9SDimitry Andric  // FIXME: These should be private.
495d72607e9SDimitry Andric  module __bit_reference { header "__bit_reference" export * }
496d72607e9SDimitry Andric  module __debug { header "__debug" export * }
4974ba319b5SDimitry Andric  module __errc { header "__errc" export * }
498d72607e9SDimitry Andric  module __functional_base { header "__functional_base" export * }
499d72607e9SDimitry Andric  module __hash_table { header "__hash_table" export * }
500d72607e9SDimitry Andric  module __locale { header "__locale" export * }
501d72607e9SDimitry Andric  module __mutex_base { header "__mutex_base" export * }
502d72607e9SDimitry Andric  module __split_buffer { header "__split_buffer" export * }
503d72607e9SDimitry Andric  module __sso_allocator { header "__sso_allocator" export * }
504d72607e9SDimitry Andric  module __std_stream { header "__std_stream" export * }
505aed8d94eSDimitry Andric  module __string { header "__string" export * }
506d72607e9SDimitry Andric  module __tree { header "__tree" export * }
507d72607e9SDimitry Andric  module __tuple { header "__tuple" export * }
508f9448bf3SDimitry Andric  module __undef_macros { header "__undef_macros" export * }
5094ba319b5SDimitry Andric  module __node_handle { header "__node_handle" export * }
510aed8d94eSDimitry Andric
511aed8d94eSDimitry Andric  module experimental {
512aed8d94eSDimitry Andric    requires cplusplus11
513aed8d94eSDimitry Andric
514aed8d94eSDimitry Andric    module algorithm {
515aed8d94eSDimitry Andric      header "experimental/algorithm"
516aed8d94eSDimitry Andric      export *
517aed8d94eSDimitry Andric    }
518302affcbSDimitry Andric     module coroutine {
51989cb50c9SDimitry Andric      requires coroutines
520302affcbSDimitry Andric      header "experimental/coroutine"
521302affcbSDimitry Andric      export *
522302affcbSDimitry Andric    }
523aed8d94eSDimitry Andric    module deque {
524aed8d94eSDimitry Andric      header "experimental/deque"
525aed8d94eSDimitry Andric      export *
526aed8d94eSDimitry Andric    }
527aed8d94eSDimitry Andric    module filesystem {
528aed8d94eSDimitry Andric      header "experimental/filesystem"
529aed8d94eSDimitry Andric      export *
530aed8d94eSDimitry Andric    }
531aed8d94eSDimitry Andric    module forward_list {
532aed8d94eSDimitry Andric      header "experimental/forward_list"
533aed8d94eSDimitry Andric      export *
534aed8d94eSDimitry Andric    }
535aed8d94eSDimitry Andric    module functional {
536aed8d94eSDimitry Andric      header "experimental/functional"
537aed8d94eSDimitry Andric      export *
538aed8d94eSDimitry Andric    }
539aed8d94eSDimitry Andric    module iterator {
540aed8d94eSDimitry Andric      header "experimental/iterator"
541aed8d94eSDimitry Andric      export *
542aed8d94eSDimitry Andric    }
543aed8d94eSDimitry Andric    module list {
544aed8d94eSDimitry Andric      header "experimental/list"
545aed8d94eSDimitry Andric      export *
546aed8d94eSDimitry Andric    }
547aed8d94eSDimitry Andric    module map {
548aed8d94eSDimitry Andric      header "experimental/map"
549aed8d94eSDimitry Andric      export *
550aed8d94eSDimitry Andric    }
551aed8d94eSDimitry Andric    module memory_resource {
552aed8d94eSDimitry Andric      header "experimental/memory_resource"
553aed8d94eSDimitry Andric      export *
554aed8d94eSDimitry Andric    }
555aed8d94eSDimitry Andric    module propagate_const {
556aed8d94eSDimitry Andric      header "experimental/propagate_const"
557aed8d94eSDimitry Andric      export *
558aed8d94eSDimitry Andric    }
559aed8d94eSDimitry Andric    module regex {
560aed8d94eSDimitry Andric      header "experimental/regex"
561aed8d94eSDimitry Andric      export *
562aed8d94eSDimitry Andric    }
5634ba319b5SDimitry Andric    module simd {
5644ba319b5SDimitry Andric      header "experimental/simd"
5654ba319b5SDimitry Andric      export *
5664ba319b5SDimitry Andric    }
567aed8d94eSDimitry Andric    module set {
568aed8d94eSDimitry Andric      header "experimental/set"
569aed8d94eSDimitry Andric      export *
570aed8d94eSDimitry Andric    }
5714ba319b5SDimitry Andric    module span {
5724ba319b5SDimitry Andric      header "span"
5734ba319b5SDimitry Andric      export *
5744ba319b5SDimitry Andric    }
575aed8d94eSDimitry Andric    module string {
576aed8d94eSDimitry Andric      header "experimental/string"
577aed8d94eSDimitry Andric      export *
578aed8d94eSDimitry Andric    }
579aed8d94eSDimitry Andric    module type_traits {
580aed8d94eSDimitry Andric      header "experimental/type_traits"
581aed8d94eSDimitry Andric      export *
582aed8d94eSDimitry Andric    }
583aed8d94eSDimitry Andric    module unordered_map {
584aed8d94eSDimitry Andric      header "experimental/unordered_map"
585aed8d94eSDimitry Andric      export *
586aed8d94eSDimitry Andric    }
587aed8d94eSDimitry Andric    module unordered_set {
588aed8d94eSDimitry Andric      header "experimental/unordered_set"
589aed8d94eSDimitry Andric      export *
590aed8d94eSDimitry Andric    }
591aed8d94eSDimitry Andric    module utility {
592aed8d94eSDimitry Andric      header "experimental/utility"
593aed8d94eSDimitry Andric      export *
594aed8d94eSDimitry Andric    }
595aed8d94eSDimitry Andric    module vector {
596aed8d94eSDimitry Andric      header "experimental/vector"
597aed8d94eSDimitry Andric      export *
598aed8d94eSDimitry Andric    }
599aed8d94eSDimitry Andric    // FIXME these should be private
600aed8d94eSDimitry Andric    module __memory {
601aed8d94eSDimitry Andric      header "experimental/__memory"
602aed8d94eSDimitry Andric      export *
603aed8d94eSDimitry Andric    }
604aed8d94eSDimitry Andric  } // end experimental
605d72607e9SDimitry Andric}
606