1276792Sdimmodule std [system] {
2276792Sdim  // FIXME: The standard does not require that each of these submodules
3276792Sdim  // re-exports its imported modules. We should provide an alternative form of
4276792Sdim  // export that issues a warning if a name from the submodule is used, and
5276792Sdim  // use that to provide a 'strict mode' for libc++.
6276792Sdim  module algorithm {
7276792Sdim    header "algorithm"
8276792Sdim    export initializer_list
9276792Sdim    export *
10276792Sdim  }
11276792Sdim  module array {
12276792Sdim    header "array"
13276792Sdim    export initializer_list
14276792Sdim    export *
15276792Sdim  }
16276792Sdim  module atomic {
17276792Sdim    header "atomic"
18276792Sdim    export *
19276792Sdim    requires cplusplus11
20276792Sdim  }
21276792Sdim  module bitset {
22276792Sdim    header "bitset"
23276792Sdim    export string
24276792Sdim    export iosfwd
25276792Sdim    export *
26276792Sdim  }
27276792Sdim  // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
28276792Sdim  module ccomplex {
29276792Sdim    header "ccomplex"
30276792Sdim    export complex
31276792Sdim    export *
32276792Sdim  }
33276792Sdim  module cctype {
34276792Sdim    header "cctype"
35276792Sdim    export *
36276792Sdim  }
37276792Sdim  module cerrno {
38276792Sdim    header "cerrno"
39276792Sdim/*
40276792Sdim    export_macros    ECONNREFUSED, EIO,          ENODEV,      ENOTEMPTY,       ERANGE,
41276792Sdim      E2BIG,         ECONNRESET,   EISCONN,      ENOENT,      ENOTRECOVERABLE, EROFS,
42276792Sdim      EACCES,        EDEADLK,      EISDIR,       ENOEXEC,     ENOTSOCK,        ESPIPE,
43276792Sdim      EADDRINUSE,    EDESTADDRREQ, ELOOP,        ENOLCK,      ENOTSUP,         ESRCH,
44276792Sdim      EADDRNOTAVAIL, EDOM,         EMFILE,       ENOLINK,     ENOTTY,          ETIME,
45276792Sdim      EAFNOSUPPORT,  EEXIST,       EMLINK,       ENOMEM,      ENXIO,           ETIMEDOUT,
46276792Sdim      EAGAIN,        EFAULT,       EMSGSIZE,     ENOMSG,      EOPNOTSUPP,      ETXTBSY,
47276792Sdim      EALREADY,      EFBIG,        ENAMETOOLONG, ENOPROTOOPT, EOVERFLOW,       EWOULDBLOCK,
48276792Sdim      EBADF,         EHOSTUNREACH, ENETDOWN,     ENOSPC,      EOWNERDEAD,      EXDEV,
49276792Sdim      EBADMSG,       EIDRM,        ENETRESET,    ENOSR,       EPERM,           errno,
50276792Sdim      EBUSY,         EILSEQ,       ENETUNREACH,  ENOSTR,      EPIPE,
51276792Sdim      ECANCELED,     EINPROGRESS,  ENFILE,       ENOSYS,      EPROTO,
52276792Sdim      ECHILD,        EINTR,        ENOBUFS,      ENOTCONN,    EPROTONOSUPPORT,
53276792Sdim      ECONNABORTED,  EINVAL,       ENODATA,      ENOTDIR,     EPROTOTYPE
54276792Sdim*/
55276792Sdim    export *
56276792Sdim  }
57276792Sdim  module cfenv {
58276792Sdim    header "cfenv"
59276792Sdim/*
60276792Sdim    export_macros FE_ALL_EXCEPT, FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW,
61276792Sdim                  FE_UNDERFLOW, FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD,
62276792Sdim                  FE_DFL_ENV
63276792Sdim*/
64276792Sdim    export *
65276792Sdim  }
66276792Sdim  module cfloat {
67276792Sdim    header "cfloat"
68276792Sdim/*
69276792Sdim    export_macros FLT_EVAL_METHOD, FLT_RADIX, FLT_ROUNDS,
70276792Sdim                  FLT_DIG, FLT_EPSILON, FLT_MANT_DIG,
71276792Sdim                  FLT_MAX, FLT_MAX_10_EXP, FLT_MAX_EXP,
72276792Sdim                  FLT_MIN, FLT_MIN_10_EXP, FLT_MIN_EXP,
73276792Sdim                  DBL_DIG, DBL_EPSILON, DBL_MANT_DIG,
74276792Sdim                  DBL_MAX, DBL_MAX_10_EXP, DBL_MAX_EXP,
75276792Sdim                  DBL_MIN, DBL_MIN_10_EXP, DBL_MIN_EXP,
76276792Sdim                  LDBL_DIG, LDBL_EPSILON, LDBL_MANT_DIG,
77276792Sdim                  LDBL_MAX, LDBL_MAX_10_EXP, LDBL_MAX_EXP,
78276792Sdim                  LDBL_MIN, LDBL_MIN_10_EXP, LDBL_MIN_EXP
79276792Sdim*/
80276792Sdim    export *
81276792Sdim  }
82276792Sdim  module chrono {
83276792Sdim    header "chrono"
84276792Sdim    export *
85276792Sdim  }
86276792Sdim  module cinttypes {
87276792Sdim    header "cinttypes"
88276792Sdim    export cstdint
89276792Sdim/*
90276792Sdim    export_macros
91276792Sdim      PRId8, PRId16, PRId32, PRId64, PRIdFAST8, PRIdFAST16, PRIdFAST32, PRIdFAST64, PRIdLEAST8, PRIdLEAST16, PRIdLEAST32, PRIdLEAST64, PRIdMAX, PRIdPTR,
92276792Sdim      PRIi8, PRIi16, PRIi32, PRIi64, PRIiFAST8, PRIiFAST16, PRIiFAST32, PRIiFAST64, PRIiLEAST8, PRIiLEAST16, PRIiLEAST32, PRIiLEAST64, PRIiMAX, PRIiPTR,
93276792Sdim      PRIo8, PRIo16, PRIo32, PRIo64, PRIoFAST8, PRIoFAST16, PRIoFAST32, PRIoFAST64, PRIoLEAST8, PRIoLEAST16, PRIoLEAST32, PRIoLEAST64, PRIoMAX, PRIoPTR,
94276792Sdim      PRIu8, PRIu16, PRIu32, PRIu64, PRIuFAST8, PRIuFAST16, PRIuFAST32, PRIuFAST64, PRIuLEAST8, PRIuLEAST16, PRIuLEAST32, PRIuLEAST64, PRIuMAX, PRIuPTR,
95276792Sdim      PRIx8, PRIx16, PRIx32, PRIx64, PRIxFAST8, PRIxFAST16, PRIxFAST32, PRIxFAST64, PRIxLEAST8, PRIxLEAST16, PRIxLEAST32, PRIxLEAST64, PRIxMAX, PRIxPTR,
96276792Sdim      PRIX8, PRIX16, PRIX32, PRIX64, PRIXFAST8, PRIXFAST16, PRIXFAST32, PRIXFAST64, PRIXLEAST8, PRIXLEAST16, PRIXLEAST32, PRIXLEAST64, PRIXMAX, PRIXPTR,
97276792Sdim      SCNd8, SCNd16, SCNd32, SCNd64, SCNdFAST8, SCNdFAST16, SCNdFAST32, SCNdFAST64, SCNdLEAST8, SCNdLEAST16, SCNdLEAST32, SCNdLEAST64, SCNdMAX, SCNdPTR,
98276792Sdim      SCNi8, SCNi16, SCNi32, SCNi64, SCNiFAST8, SCNiFAST16, SCNiFAST32, SCNiFAST64, SCNiLEAST8, SCNiLEAST16, SCNiLEAST32, SCNiLEAST64, SCNiMAX, SCNiPTR,
99276792Sdim      SCNo8, SCNo16, SCNo32, SCNo64, SCNoFAST8, SCNoFAST16, SCNoFAST32, SCNoFAST64, SCNoLEAST8, SCNoLEAST16, SCNoLEAST32, SCNoLEAST64, SCNoMAX, SCNoPTR,
100276792Sdim      SCNu8, SCNu16, SCNu32, SCNu64, SCNuFAST8, SCNuFAST16, SCNuFAST32, SCNuFAST64, SCNuLEAST8, SCNuLEAST16, SCNuLEAST32, SCNuLEAST64, SCNuMAX, SCNuPTR,
101276792Sdim      SCNx8, SCNx16, SCNx32, SCNx64, SCNxFAST8, SCNxFAST16, SCNxFAST32, SCNxFAST64, SCNxLEAST8, SCNxLEAST16, SCNxLEAST32, SCNxLEAST64, SCNxMAX, SCNxPTR,
102276792Sdim      SCNX8, SCNX16, SCNX32, SCNX64, SCNXFAST8, SCNXFAST16, SCNXFAST32, SCNXFAST64, SCNXLEAST8, SCNXLEAST16, SCNXLEAST32, SCNXLEAST64, SCNXMAX, SCNXPTR
103276792Sdim*/
104276792Sdim    export *
105276792Sdim  }
106276792Sdim  module ciso646 {
107276792Sdim    header "ciso646"
108276792Sdim    export *
109276792Sdim  }
110276792Sdim  module climits {
111276792Sdim    header "climits"
112276792Sdim/*
113276792Sdim    export_macros CHAR_BIT,  CHAR_MIN,  CHAR_MAX,
114276792Sdim                  SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
115276792Sdim                  SHRT_MIN,  SHRT_MAX,  USHRT_MAX,
116276792Sdim                  INT_MIN,   INT_MAX,   UINT_MAX,
117276792Sdim                  LONG_MIN,  LONG_MAX,  ULONG_MAX,
118276792Sdim                  LLONG_MIN, LLONG_MAX, ULLONG_MAX,
119276792Sdim                  MB_LEN_MAX
120276792Sdim*/
121276792Sdim    export *
122276792Sdim  }
123276792Sdim  module clocale {
124276792Sdim    header "clocale"
125276792Sdim/*
126276792Sdim    export_macros LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, NULL
127276792Sdim*/
128276792Sdim    export *
129276792Sdim  }
130276792Sdim  module cmath {
131276792Sdim    header "cmath"
132276792Sdim/*
133276792Sdim    export_macros FP_FAST_FMA, FP_FAST_FMAF, FP_FAST_FMAL, FP_ILOGBO, FP_ILOGBNAN,
134276792Sdim                  FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO,
135276792Sdim                  HUGE_VAL, HUGE_VALF, HUGE_VALL, INFINITY, NAN,
136276792Sdim                  MATH_ERRNO, MATH_ERREXCEPT, math_errhandling
137276792Sdim*/
138276792Sdim    export *
139276792Sdim  }
140276792Sdim  module codecvt {
141276792Sdim    header "codecvt"
142276792Sdim    export *
143276792Sdim  }
144276792Sdim  module complex {
145276792Sdim    header "complex"
146276792Sdim    export *
147276792Sdim  }
148276792Sdim  module condition_variable {
149276792Sdim    header "condition_variable"
150276792Sdim    export *
151276792Sdim  }
152276792Sdim  module csetjmp {
153276792Sdim    header "csetjmp"
154276792Sdim/*
155276792Sdim    export_macros setjmp
156276792Sdim*/
157276792Sdim    export *
158276792Sdim  }
159276792Sdim  module csignal {
160276792Sdim    header "csignal"
161276792Sdim/*
162276792Sdim    export_macros SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM,
163276792Sdim                  SIG_DFL, SIG_IGN, SIG_ERR
164276792Sdim*/
165276792Sdim    export *
166276792Sdim  }
167276792Sdim  module cstdarg {
168276792Sdim    header "cstdarg"
169276792Sdim/*
170276792Sdim    export_macros va_arg, va_start, va_end, va_copy
171276792Sdim*/
172276792Sdim    export *
173276792Sdim  }
174276792Sdim  module cstdbool {
175276792Sdim    header "cstdbool"
176276792Sdim/*
177276792Sdim    export_macros __bool_true_false_are_defined
178276792Sdim*/
179276792Sdim    export *
180276792Sdim  }
181276792Sdim  module cstddef {
182276792Sdim    header "cstddef"
183276792Sdim/*
184276792Sdim    export_macros NULL, offsetof
185276792Sdim*/
186276792Sdim    export *
187276792Sdim  }
188276792Sdim  module cstdint {
189276792Sdim    header "cstdint"
190276792Sdim/*
191276792Sdim    export_macros
192276792Sdim      INT_8_MIN, INT_8_MAX, UINT_8_MAX, INT_16_MIN, INT_16_MAX, UINT_16_MAX,
193276792Sdim      INT_32_MIN, INT_32_MAX, UINT_32_MAX, INT_64_MIN, INT_64_MAX, UINT_64_MAX,
194276792Sdim      INT_FAST8_MIN, INT_FAST8_MAX, UINT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX, UINT_FAST16_MAX,
195276792Sdim      INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX, INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX,
196276792Sdim      INT_LEAST8_MIN, INT_LEAST8_MAX, UINT_LEAST8_MAX, INT_LEAST16_MIN, INT_LEAST16_MAX, UINT_LEAST16_MAX,
197276792Sdim      INT_LEAST32_MIN, INT_LEAST32_MAX, UINT_LEAST32_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX,
198276792Sdim      INT_MAX_MIN, INT_MAX_MAX, UINT_MAX_MAX, INT_PTR_MIN, INT_PTR_MAX, UINT_PTR_MAX,
199276792Sdim      PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX,
200276792Sdim      SIZE_MAX
201276792Sdim*/
202276792Sdim    export *
203276792Sdim  }
204276792Sdim  module cstdio {
205276792Sdim    header "cstdio"
206276792Sdim/*
207276792Sdim    export_macros BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_tmpnam, NULL,
208276792Sdim                  SEEK_CUR, SEEK_END, SEEK_SET, TMP_MAX, _IOFBF, _IOLBF,
209276792Sdim                  stdin, stdout, stderr
210276792Sdim*/
211276792Sdim    export *
212276792Sdim  }
213276792Sdim  module cstdlib {
214276792Sdim    header "cstdlib"
215276792Sdim/*
216276792Sdim    export_macros RAND_MAX
217276792Sdim*/
218276792Sdim    export *
219276792Sdim  }
220276792Sdim  module cstring {
221276792Sdim    header "cstring"
222276792Sdim/*
223276792Sdim    export_macros NULL
224276792Sdim*/
225276792Sdim    export *
226276792Sdim  }
227276792Sdim  module ctgmath {
228276792Sdim    header "ctgmath"
229276792Sdim    export ccomplex
230276792Sdim    export cmath
231276792Sdim    export *
232276792Sdim  }
233276792Sdim  module ctime {
234276792Sdim    header "ctime"
235276792Sdim/*
236276792Sdim    export_macros NULL, CLOCKS_PER_SEC
237276792Sdim*/
238276792Sdim    export *
239276792Sdim  }
240276792Sdim  module cwchar {
241276792Sdim    header "cwchar"
242276792Sdim/*
243276792Sdim    export_macros NULL, WCHAR_MAX, WCHAR_MIN, WEOF
244276792Sdim*/
245276792Sdim    export *
246276792Sdim  }
247276792Sdim  module cwctype {
248276792Sdim    header "cwctype"
249276792Sdim/*
250276792Sdim    export_macros WEOF
251276792Sdim*/
252276792Sdim    export *
253276792Sdim  }
254276792Sdim  module deque {
255276792Sdim    header "deque"
256276792Sdim    export initializer_list
257276792Sdim    export *
258276792Sdim  }
259276792Sdim  module exception {
260276792Sdim    header "exception"
261276792Sdim    export *
262276792Sdim  }
263276792Sdim  module forward_list {
264276792Sdim    header "forward_list"
265276792Sdim    export initializer_list
266276792Sdim    export *
267276792Sdim  }
268276792Sdim  module fstream {
269276792Sdim    header "fstream"
270276792Sdim    export *
271276792Sdim  }
272276792Sdim  module functional {
273276792Sdim    header "functional"
274276792Sdim    export *
275276792Sdim  }
276276792Sdim  module future {
277276792Sdim    header "future"
278276792Sdim    export *
279276792Sdim  }
280276792Sdim  module initializer_list {
281276792Sdim    header "initializer_list"
282276792Sdim    export *
283276792Sdim  }
284276792Sdim  module iomanip {
285276792Sdim    header "iomanip"
286276792Sdim    export *
287276792Sdim  }
288276792Sdim  module ios {
289276792Sdim    header "ios"
290276792Sdim    export iosfwd
291276792Sdim    export *
292276792Sdim  }
293276792Sdim  module iosfwd {
294276792Sdim    header "iosfwd"
295276792Sdim    export *
296276792Sdim  }
297276792Sdim  module iostream {
298276792Sdim    header "iostream"
299276792Sdim    export ios
300276792Sdim    export streambuf
301276792Sdim    export istream
302276792Sdim    export ostream
303276792Sdim    export *
304276792Sdim  }
305276792Sdim  module istream {
306276792Sdim    header "istream"
307276792Sdim    // FIXME: should re-export ios, streambuf?
308276792Sdim    export *
309276792Sdim  }
310276792Sdim  module iterator {
311276792Sdim    header "iterator"
312276792Sdim    export *
313276792Sdim  }
314276792Sdim  module limits {
315276792Sdim    header "limits"
316276792Sdim    export *
317276792Sdim  }
318276792Sdim  module list {
319276792Sdim    header "list"
320276792Sdim    export initializer_list
321276792Sdim    export *
322276792Sdim  }
323276792Sdim  module locale {
324276792Sdim    header "locale"
325276792Sdim    export *
326276792Sdim  }
327276792Sdim  module map {
328276792Sdim    header "map"
329276792Sdim    export initializer_list
330276792Sdim    export *
331276792Sdim  }
332276792Sdim  module memory {
333276792Sdim    header "memory"
334276792Sdim    export *
335276792Sdim  }
336276792Sdim  module mutex {
337276792Sdim    header "mutex"
338276792Sdim    export *
339276792Sdim  }
340276792Sdim  module new {
341276792Sdim    header "new"
342276792Sdim    export *
343276792Sdim  }
344276792Sdim  module numeric {
345276792Sdim    header "numeric"
346276792Sdim    export *
347276792Sdim  }
348276792Sdim  module ostream {
349276792Sdim    header "ostream"
350276792Sdim    // FIXME: should re-export ios, streambuf?
351276792Sdim    export *
352276792Sdim  }
353276792Sdim  module queue {
354276792Sdim    header "queue"
355276792Sdim    export initializer_list
356276792Sdim    export *
357276792Sdim  }
358276792Sdim  module random {
359276792Sdim    header "random"
360276792Sdim    export initializer_list
361276792Sdim    export *
362276792Sdim  }
363276792Sdim  module ratio {
364276792Sdim    header "ratio"
365276792Sdim    export *
366276792Sdim  }
367276792Sdim  module regex {
368276792Sdim    header "regex"
369276792Sdim    export initializer_list
370276792Sdim    export *
371276792Sdim  }
372276792Sdim  module scoped_allocator {
373276792Sdim    header "scoped_allocator"
374276792Sdim    export *
375276792Sdim  }
376276792Sdim  module set {
377276792Sdim    header "set"
378276792Sdim    export initializer_list
379276792Sdim    export *
380276792Sdim  }
381276792Sdim  module sstream {
382276792Sdim    header "sstream"
383276792Sdim    // FIXME: should re-export istream, ostream, ios, streambuf, string?
384276792Sdim    export *
385276792Sdim  }
386276792Sdim  module stack {
387276792Sdim    header "stack"
388276792Sdim    export initializer_list
389276792Sdim    export *
390276792Sdim  }
391276792Sdim  module stdexcept {
392276792Sdim    header "stdexcept"
393276792Sdim    export *
394276792Sdim  }
395276792Sdim  module streambuf {
396276792Sdim    header "streambuf"
397276792Sdim    export *
398276792Sdim  }
399276792Sdim  module string {
400276792Sdim    header "string"
401276792Sdim    export initializer_list
402276792Sdim    export *
403276792Sdim  }
404276792Sdim  module strstream {
405276792Sdim    header "strstream"
406276792Sdim    requires !cplusplus11
407276792Sdim  }
408276792Sdim  module system_error {
409276792Sdim    header "system_error"
410276792Sdim    export *
411276792Sdim  }
412276792Sdim  module thread {
413276792Sdim    header "thread"
414276792Sdim    export *
415276792Sdim  }
416276792Sdim  module tuple {
417276792Sdim    header "tuple"
418276792Sdim    export *
419276792Sdim  }
420276792Sdim  module type_traits {
421276792Sdim    header "type_traits"
422276792Sdim    export *
423276792Sdim  }
424276792Sdim  module typeindex {
425276792Sdim    header "typeindex"
426276792Sdim    export *
427276792Sdim  }
428276792Sdim  module typeinfo {
429276792Sdim    header "typeinfo"
430276792Sdim    export *
431276792Sdim  }
432276792Sdim  module unordered_map {
433276792Sdim    header "unordered_map"
434276792Sdim    export initializer_list
435276792Sdim    export *
436276792Sdim  }
437276792Sdim  module unordered_set {
438276792Sdim    header "unordered_set"
439276792Sdim    export initializer_list
440276792Sdim    export *
441276792Sdim  }
442276792Sdim  module utility {
443276792Sdim    header "utility"
444276792Sdim    export initializer_list
445276792Sdim    export *
446276792Sdim  }
447276792Sdim  module valarray {
448276792Sdim    header "valarray"
449276792Sdim    export initializer_list
450276792Sdim    export *
451276792Sdim  }
452276792Sdim  module vector {
453276792Sdim    header "vector"
454276792Sdim    export initializer_list
455276792Sdim    export *
456276792Sdim  }
457276792Sdim
458276792Sdim  // FIXME: These should be private.
459276792Sdim  module __bit_reference { header "__bit_reference" export * }
460276792Sdim  module __config { header "__config" export * }
461276792Sdim  module __debug { header "__debug" export * }
462276792Sdim  module __functional_base { header "__functional_base" export * }
463276792Sdim  module __hash_table { header "__hash_table" export * }
464276792Sdim  module __locale { header "__locale" export * }
465276792Sdim  module __mutex_base { header "__mutex_base" export * }
466276792Sdim  module __split_buffer { header "__split_buffer" export * }
467276792Sdim  module __sso_allocator { header "__sso_allocator" export * }
468276792Sdim  module __std_stream { header "__std_stream" export * }
469276792Sdim  module __tree { header "__tree" export * }
470276792Sdim  module __tuple { header "__tuple" export * }
471276792Sdim  module __undef_min_max { header "__undef_min_max" export * }
472276792Sdim}
473