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