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 forward_list { 296 header "forward_list" 297 export initializer_list 298 export * 299 } 300 module fstream { 301 header "fstream" 302 export * 303 } 304 module functional { 305 header "functional" 306 export * 307 } 308 module future { 309 header "future" 310 export * 311 } 312 module initializer_list { 313 header "initializer_list" 314 export * 315 } 316 module iomanip { 317 header "iomanip" 318 export * 319 } 320 module ios { 321 header "ios" 322 export iosfwd 323 export * 324 } 325 module iosfwd { 326 header "iosfwd" 327 export * 328 } 329 module iostream { 330 header "iostream" 331 export ios 332 export streambuf 333 export istream 334 export ostream 335 export * 336 } 337 module istream { 338 header "istream" 339 // FIXME: should re-export ios, streambuf? 340 export * 341 } 342 module iterator { 343 header "iterator" 344 export * 345 } 346 module latch { 347 requires cplusplus14 348 header "latch" 349 export * 350 } 351 module limits { 352 header "limits" 353 export * 354 } 355 module list { 356 header "list" 357 export initializer_list 358 export * 359 } 360 module locale { 361 header "locale" 362 export * 363 } 364 module map { 365 header "map" 366 export initializer_list 367 export * 368 } 369 module memory { 370 header "memory" 371 export * 372 } 373 module mutex { 374 header "mutex" 375 export * 376 } 377 module new { 378 header "new" 379 export * 380 } 381 module numbers { 382 header "numbers" 383 export * 384 } 385 module numeric { 386 header "numeric" 387 export * 388 } 389 module optional { 390 header "optional" 391 export * 392 } 393 module ostream { 394 header "ostream" 395 // FIXME: should re-export ios, streambuf? 396 export * 397 } 398 module queue { 399 header "queue" 400 export initializer_list 401 export * 402 } 403 module random { 404 header "random" 405 export initializer_list 406 export * 407 } 408 module ratio { 409 header "ratio" 410 export * 411 } 412 module regex { 413 header "regex" 414 export initializer_list 415 export * 416 } 417 module scoped_allocator { 418 header "scoped_allocator" 419 export * 420 } 421 module semaphore { 422 requires cplusplus14 423 header "semaphore" 424 export * 425 } 426 module set { 427 header "set" 428 export initializer_list 429 export * 430 } 431 module sstream { 432 header "sstream" 433 // FIXME: should re-export istream, ostream, ios, streambuf, string? 434 export * 435 } 436 module stack { 437 header "stack" 438 export initializer_list 439 export * 440 } 441 module stdexcept { 442 header "stdexcept" 443 export * 444 } 445 module streambuf { 446 header "streambuf" 447 export * 448 } 449 module string { 450 header "string" 451 export initializer_list 452 export string_view 453 export __string 454 export * 455 } 456 module string_view { 457 header "string_view" 458 export initializer_list 459 export __string 460 export * 461 } 462 module strstream { 463 header "strstream" 464 export * 465 } 466 module system_error { 467 header "system_error" 468 export * 469 } 470 module thread { 471 header "thread" 472 export * 473 } 474 module tuple { 475 header "tuple" 476 export * 477 } 478 module type_traits { 479 header "type_traits" 480 export * 481 } 482 module typeindex { 483 header "typeindex" 484 export * 485 } 486 module typeinfo { 487 header "typeinfo" 488 export * 489 } 490 module unordered_map { 491 header "unordered_map" 492 export initializer_list 493 export * 494 } 495 module unordered_set { 496 header "unordered_set" 497 export initializer_list 498 export * 499 } 500 module utility { 501 header "utility" 502 export initializer_list 503 export * 504 } 505 module valarray { 506 header "valarray" 507 export initializer_list 508 export * 509 } 510 module variant { 511 header "variant" 512 export * 513 } 514 module vector { 515 header "vector" 516 export initializer_list 517 export * 518 } 519 module version { 520 header "version" 521 export * 522 } 523 524 // FIXME: These should be private. 525 module __bit_reference { header "__bit_reference" export * } 526 module __debug { header "__debug" export * } 527 module __errc { header "__errc" export * } 528 module __functional_base { header "__functional_base" export * } 529 module __hash_table { header "__hash_table" export * } 530 module __locale { header "__locale" export * } 531 module __mutex_base { header "__mutex_base" export * } 532 module __split_buffer { header "__split_buffer" export * } 533 module __sso_allocator { header "__sso_allocator" export * } 534 module __std_stream { header "__std_stream" export * } 535 module __string { header "__string" export * } 536 module __tree { header "__tree" export * } 537 module __tuple { header "__tuple" export * } 538 module __undef_macros { header "__undef_macros" export * } 539 module __node_handle { header "__node_handle" export * } 540 541 module experimental { 542 requires cplusplus11 543 544 module algorithm { 545 header "experimental/algorithm" 546 export * 547 } 548 module coroutine { 549 requires coroutines 550 header "experimental/coroutine" 551 export * 552 } 553 module deque { 554 header "experimental/deque" 555 export * 556 } 557 module filesystem { 558 header "experimental/filesystem" 559 export * 560 } 561 module forward_list { 562 header "experimental/forward_list" 563 export * 564 } 565 module functional { 566 header "experimental/functional" 567 export * 568 } 569 module iterator { 570 header "experimental/iterator" 571 export * 572 } 573 module list { 574 header "experimental/list" 575 export * 576 } 577 module map { 578 header "experimental/map" 579 export * 580 } 581 module memory_resource { 582 header "experimental/memory_resource" 583 export * 584 } 585 module propagate_const { 586 header "experimental/propagate_const" 587 export * 588 } 589 module regex { 590 header "experimental/regex" 591 export * 592 } 593 module simd { 594 header "experimental/simd" 595 export * 596 } 597 module set { 598 header "experimental/set" 599 export * 600 } 601 module span { 602 header "span" 603 export * 604 } 605 module string { 606 header "experimental/string" 607 export * 608 } 609 module type_traits { 610 header "experimental/type_traits" 611 export * 612 } 613 module unordered_map { 614 header "experimental/unordered_map" 615 export * 616 } 617 module unordered_set { 618 header "experimental/unordered_set" 619 export * 620 } 621 module utility { 622 header "experimental/utility" 623 export * 624 } 625 module vector { 626 header "experimental/vector" 627 export * 628 } 629 // FIXME these should be private 630 module __memory { 631 header "experimental/__memory" 632 export * 633 } 634 } // end experimental 635} 636