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