// define the module for __config outside of the top level 'std' module // since __config may be included from C headers which may create an // include cycle. module std_config [system] [extern_c] { header "__config" } module std [system] { export std_config // FIXME: The standard does not require that each of these submodules // re-exports its imported modules. We should provide an alternative form of // export that issues a warning if a name from the submodule is used, and // use that to provide a 'strict mode' for libc++. // Deprecated C-compatibility headers. These can all be included from within // an 'extern "C"' context. module depr [extern_c] { // provided by C library. module ctype_h { header "ctype.h" export * } module errno_h { header "errno.h" export * } module fenv_h { header "fenv.h" export * } // provided by compiler or C library. module inttypes_h { header "inttypes.h" export stdint_h export * } // provided by compiler. // provided by compiler or C library. module locale_h { header "locale.h" export * } module math_h { header "math.h" export * } module setjmp_h { header "setjmp.h" export * } // FIXME: is missing. // provided by C library. // provided by compiler. // provided by compiler. module stddef_h { // 's __need_* macros require textual inclusion. textual header "stddef.h" } module stdint_h { header "stdint.h" export * // FIXME: This module only exists on OS X and for some reason the // wildcard above doesn't export it. export Darwin.C.stdint } module stdio_h { // 's __need_* macros require textual inclusion. textual header "stdio.h" export * export Darwin.C.stdio } module stdlib_h { // 's __need_* macros require textual inclusion. textual header "stdlib.h" export * } module string_h { header "string.h" export * } // FIXME: is missing. // provided by C library. module wchar_h { // 's __need_* macros require textual inclusion. textual header "wchar.h" export * } module wctype_h { header "wctype.h" export * } } // and are not C headers in any real sense, do not // allow their use in extern "C" contexts. module complex_h { header "complex.h" export ccomplex export * } module tgmath_h { header "tgmath.h" export ccomplex export cmath export * } // C compatibility headers. module compat { module cassert { // 's use of NDEBUG requires textual inclusion. textual header "cassert" } module ccomplex { header "ccomplex" export complex export * } module cctype { header "cctype" export * } module cerrno { header "cerrno" export * } module cfenv { header "cfenv" export * } module cfloat { header "cfloat" export * } module cinttypes { header "cinttypes" export cstdint export * } module ciso646 { header "ciso646" export * } module climits { header "climits" export * } module clocale { header "clocale" export * } module cmath { header "cmath" export * } module csetjmp { header "csetjmp" export * } module csignal { header "csignal" export * } // FIXME: is missing. module cstdarg { header "cstdarg" export * } module cstdbool { header "cstdbool" export * } module cstddef { header "cstddef" export * } module cstdint { header "cstdint" export depr.stdint_h export * } module cstdio { header "cstdio" export * } module cstdlib { header "cstdlib" export * } module cstring { header "cstring" export * } module ctgmath { header "ctgmath" export ccomplex export cmath export * } module ctime { header "ctime" export * } // FIXME: is missing. module cwchar { header "cwchar" export depr.stdio_h export * } module cwctype { header "cwctype" export * } } module algorithm { header "algorithm" export initializer_list export * module __algorithm { module adjacent_find { header "__algorithm/adjacent_find.h" } module all_of { header "__algorithm/all_of.h" } module any_of { header "__algorithm/any_of.h" } module binary_search { header "__algorithm/binary_search.h" } module clamp { header "__algorithm/clamp.h" } module comp { header "__algorithm/comp.h" } module comp_ref_type { header "__algorithm/comp_ref_type.h" } module copy { header "__algorithm/copy.h" } module copy_backward { header "__algorithm/copy_backward.h" } module copy_if { header "__algorithm/copy_if.h" } module copy_n { header "__algorithm/copy_n.h" } module count { header "__algorithm/count.h" } module count_if { header "__algorithm/count_if.h" } module equal { header "__algorithm/equal.h" } module equal_range { header "__algorithm/equal_range.h" } module fill_n { header "__algorithm/fill_n.h" } module fill { header "__algorithm/fill.h" } module find { header "__algorithm/find.h" } module find_end { header "__algorithm/find_end.h" } module find_first_of { header "__algorithm/find_first_of.h" } module find_if { header "__algorithm/find_if.h" } module find_if_not { header "__algorithm/find_if_not.h" } module for_each { header "__algorithm/for_each.h" } module for_each_n { header "__algorithm/for_each_n.h" } module generate_n { header "__algorithm/generate_n.h" } module generate { header "__algorithm/generate.h" } module half_positive { header "__algorithm/half_positive.h" } module includes { header "__algorithm/includes.h" } module inplace_merge { header "__algorithm/inplace_merge.h" } module is_heap { header "__algorithm/is_heap.h" } module is_heap_until { header "__algorithm/is_heap_until.h" } module is_partitioned { header "__algorithm/is_partitioned.h" } module is_permutation { header "__algorithm/is_permutation.h" } module is_sorted { header "__algorithm/is_sorted.h" } module is_sorted_until { header "__algorithm/is_sorted_until.h" } module lexicographical_compare { header "__algorithm/lexicographical_compare.h" } module lower_bound { header "__algorithm/lower_bound.h" } module make_heap { header "__algorithm/make_heap.h" } module max { header "__algorithm/max.h" } module max_element { header "__algorithm/max_element.h" } module merge { header "__algorithm/merge.h" } module min { header "__algorithm/min.h" } module min_element { header "__algorithm/min_element.h" } module minmax { header "__algorithm/minmax.h" } module minmax_element { header "__algorithm/minmax_element.h" } module mismatch { header "__algorithm/mismatch.h" } module move { header "__algorithm/move.h" } module move_backward { header "__algorithm/move_backward.h" } module next_permutation { header "__algorithm/next_permutation.h" } module none_of { header "__algorithm/none_of.h" } module nth_element { header "__algorithm/nth_element.h" } module partial_sort { header "__algorithm/partial_sort.h" } module partial_sort_copy { header "__algorithm/partial_sort_copy.h" } module partition { header "__algorithm/partition.h" } module partition_copy { header "__algorithm/partition_copy.h" } module partition_point { header "__algorithm/partition_point.h" } module pop_heap { header "__algorithm/pop_heap.h" } module prev_permutation { header "__algorithm/prev_permutation.h" } module push_heap { header "__algorithm/push_heap.h" } module remove { header "__algorithm/remove.h" } module remove_copy { header "__algorithm/remove_copy.h" } module remove_copy_if { header "__algorithm/remove_copy_if.h" } module remove_if { header "__algorithm/remove_if.h" } module replace { header "__algorithm/replace.h" } module replace_copy { header "__algorithm/replace_copy.h" } module replace_copy_if { header "__algorithm/replace_copy_if.h" } module replace_if { header "__algorithm/replace_if.h" } module reverse_copy { header "__algorithm/reverse_copy.h" } module reverse { header "__algorithm/reverse.h" } module rotate_copy { header "__algorithm/rotate_copy.h" } module rotate { header "__algorithm/rotate.h" } module sample { header "__algorithm/sample.h" } module search { header "__algorithm/search.h" } module search_n { header "__algorithm/search_n.h" } module set_difference { header "__algorithm/set_difference.h" } module set_intersection { header "__algorithm/set_intersection.h" } module set_symmetric_difference { header "__algorithm/set_symmetric_difference.h" } module set_union { header "__algorithm/set_union.h" } module shift_left { header "__algorithm/shift_left.h" } module shift_right { header "__algorithm/shift_right.h" } module shuffle { header "__algorithm/shuffle.h" } module sift_down { header "__algorithm/sift_down.h" } module sort { header "__algorithm/sort.h" } module sort_heap { header "__algorithm/sort_heap.h" } module stable_partition { header "__algorithm/stable_partition.h" } module stable_sort { header "__algorithm/stable_sort.h" } module transform { header "__algorithm/transform.h" } module unique_copy { header "__algorithm/unique_copy.h" } module unique { header "__algorithm/unique.h" } module unwrap_iter { header "__algorithm/unwrap_iter.h" } module upper_bound { header "__algorithm/upper_bound.h" } } } module any { header "any" export * } module array { header "array" export initializer_list export * } module atomic { header "atomic" export * } module barrier { requires cplusplus14 header "barrier" export * } module bit { header "bit" export * } module bitset { header "bitset" export string export iosfwd export * } // No submodule for cassert. It fundamentally needs repeated, textual inclusion. module charconv { header "charconv" export * } module chrono { header "chrono" export * } module codecvt { header "codecvt" export * } module compare { header "compare" export * } module complex { header "complex" export * } module concepts { header "concepts" export * } module condition_variable { header "condition_variable" export * } module deque { header "deque" export initializer_list export * } module exception { header "exception" export * } module execution { header "execution" export * } module filesystem { header "filesystem" export * } module format { header "format" export * module __format { module format_error { header "__format/format_error.h" } module format_parse_context { header "__format/format_parse_context.h" } } } module forward_list { header "forward_list" export initializer_list export * } module fstream { header "fstream" export * } module functional { header "functional" export * module __functional { module binary_function { header "__functional/binary_function.h" } module binary_negate { header "__functional/binary_negate.h" } module bind { header "__functional/bind.h" } module bind_front { header "__functional/bind_front.h" } module binder1st { header "__functional/binder1st.h" } module binder2nd { header "__functional/binder2nd.h" } module default_searcher { header "__functional/default_searcher.h" } module function { header "__functional/function.h" } module hash { header "__functional/hash.h" } module identity { header "__functional/identity.h" } module invoke { header "__functional/invoke.h" } module mem_fn { header "__functional/mem_fn.h" } module mem_fun_ref { header "__functional/mem_fun_ref.h" } module not_fn { header "__functional/not_fn.h" } module operations { header "__functional/operations.h" } module perfect_forward { header "__functional/perfect_forward.h" } module pointer_to_binary_function { header "__functional/pointer_to_binary_function.h" } module pointer_to_unary_function { header "__functional/pointer_to_unary_function.h" } module ranges_operations { header "__functional/ranges_operations.h" } module reference_wrapper { header "__functional/reference_wrapper.h" } module unary_function { header "__functional/unary_function.h" } module unary_negate { header "__functional/unary_negate.h" } module unwrap_ref { header "__functional/unwrap_ref.h" } module weak_result_type { header "__functional/weak_result_type.h" } } } module future { header "future" export * } module initializer_list { header "initializer_list" export * } module iomanip { header "iomanip" export * } module ios { header "ios" export iosfwd export * } module iosfwd { header "iosfwd" export * } module iostream { header "iostream" export ios export streambuf export istream export ostream export * } module istream { header "istream" // FIXME: should re-export ios, streambuf? export * } module iterator { header "iterator" export * module __iterator { module advance { header "__iterator/advance.h" } module back_insert_iterator { header "__iterator/back_insert_iterator.h" } module concepts { header "__iterator/concepts.h" } module default_sentinel { header "__iterator/default_sentinel.h" } module front_insert_iterator { header "__iterator/front_insert_iterator.h" } module incrementable_traits { header "__iterator/incrementable_traits.h" } module insert_iterator { header "__iterator/insert_iterator.h" } module istream_iterator { header "__iterator/istream_iterator.h" } module istreambuf_iterator { header "__iterator/istreambuf_iterator.h" } module iter_move { header "__iterator/iter_move.h" } module iter_swap { header "__iterator/iter_swap.h" } module iterator { header "__iterator/iterator.h" } module iterator_traits { header "__iterator/iterator_traits.h" } module move_iterator { header "__iterator/move_iterator.h" } module next { header "__iterator/next.h" } module ostream_iterator { header "__iterator/ostream_iterator.h" } module ostreambuf_iterator { header "__iterator/ostreambuf_iterator.h" } module prev { header "__iterator/prev.h" } module projected { header "__iterator/projected.h" } module readable_traits { header "__iterator/readable_traits.h" } module reverse_iterator { header "__iterator/reverse_iterator.h" } module wrap_iter { header "__iterator/wrap_iter.h" } } } module latch { requires cplusplus14 header "latch" export * } module limits { header "limits" export * } module list { header "list" export initializer_list export * } module locale { header "locale" export * } module map { header "map" export initializer_list export * } module memory { header "memory" export * module __memory { module addressof { header "__memory/addressof.h" } module allocation_guard { header "__memory/allocation_guard.h" } module allocator_traits { header "__memory/allocator_traits.h" } module allocator_arg_t { header "__memory/allocator_arg_t.h" } module allocator { header "__memory/allocator.h" } module auto_ptr { header "__memory/auto_ptr.h" } module compressed_pair { header "__memory/compressed_pair.h" } module construct_at { header "__memory/construct_at.h" } module pointer_safety { header "__memory/pointer_safety.h" } module pointer_traits { header "__memory/pointer_traits.h" } module raw_storage_iterator { header "__memory/raw_storage_iterator.h" } module shared_ptr { header "__memory/shared_ptr.h" } module temporary_buffer { header "__memory/temporary_buffer.h" } module uninitialized_algorithms { header "__memory/uninitialized_algorithms.h" } module unique_ptr { header "__memory/unique_ptr.h" } } } module mutex { header "mutex" export * } module new { header "new" export * } module numbers { header "numbers" export * } module numeric { header "numeric" export * } module optional { header "optional" export * } module ostream { header "ostream" // FIXME: should re-export ios, streambuf? export * } module queue { header "queue" export initializer_list export * } module random { header "random" export initializer_list export * module __random { module uniform_int_distribution { header "__random/uniform_int_distribution.h" } } } module ranges { header "ranges" export compare export initializer_list export iterator export * module __ranges { module access { header "__ranges/access.h" } module all { header "__ranges/all.h" } module concepts { header "__ranges/concepts.h" } module data { header "__ranges/data.h" } module empty { header "__ranges/empty.h" } module empty_view { header "__ranges/empty_view.h" } module enable_borrowed_range { header "__ranges/enable_borrowed_range.h" } module enable_view { header "__ranges/enable_view.h" } module ref_view { header "__ranges/ref_view.h" } module size { header "__ranges/size.h" } module subrange { header "__ranges/subrange.h" } module view_interface { header "__ranges/view_interface.h" } } } module ratio { header "ratio" export * } module regex { header "regex" export initializer_list export * } module scoped_allocator { header "scoped_allocator" export * } module semaphore { requires cplusplus14 header "semaphore" export * } module set { header "set" export initializer_list export * } module sstream { header "sstream" // FIXME: should re-export istream, ostream, ios, streambuf, string? export * } module stack { header "stack" export initializer_list export * } module stdexcept { header "stdexcept" export * } module streambuf { header "streambuf" export * } module string { header "string" export initializer_list export string_view export __string export * } module string_view { header "string_view" export initializer_list export __string export * } module strstream { header "strstream" export * } module system_error { header "system_error" export * } module thread { header "thread" export * } module tuple { header "tuple" export * } module type_traits { header "type_traits" export functional.__functional.unwrap_ref export * } module typeindex { header "typeindex" export * } module typeinfo { header "typeinfo" export * } module unordered_map { header "unordered_map" export initializer_list export * } module unordered_set { header "unordered_set" export initializer_list export * } module utility { header "utility" export initializer_list export * module __utility { module __decay_copy { header "__utility/__decay_copy.h" } module as_const { header "__utility/as_const.h" } module cmp { header "__utility/cmp.h" } module declval { header "__utility/declval.h" } module exchange { header "__utility/exchange.h" } module forward { header "__utility/forward.h" } module in_place { header "__utility/in_place.h" } module integer_sequence { header "__utility/integer_sequence.h" } module move { header "__utility/move.h" } module pair { header "__utility/pair.h" } module piecewise_construct { header "__utility/piecewise_construct.h" } module rel_ops { header "__utility/rel_ops.h" } module swap { header "__utility/swap.h" } module to_underlying { header "__utility/to_underlying.h" } } } module valarray { header "valarray" export initializer_list export * } module variant { header "variant" export * } module vector { header "vector" export initializer_list export * } module version { header "version" export * } // __config not modularised due to a bug in Clang // __functional(_03)?_base not modularised since it's designed for textual inclusion // libcpp_version not modularised since it's just a version number // FIXME: These should be private. module __availability { header "__availability" export * } module __bit_reference { header "__bit_reference" export * } module __bits { header "__bits" export * } module __debug { header "__debug" export * } module __errc { header "__errc" export * } module __function_like { header "__function_like.h" export * } module __hash_table { header "__hash_table" export * } module __locale { header "__locale" export * } module __mutex_base { header "__mutex_base" export * } module __node_handle { header "__node_handle" export * } module __nullptr { header "__nullptr" export * } module __split_buffer { header "__split_buffer" export * } module __std_stream { header "__std_stream" export * } module __string { header "__string" export * } module __threading_support { header "__threading_support" export * } module __tree { header "__tree" export * } module __tuple { header "__tuple" export * } module __undef_macros { header "__undef_macros" export * } module experimental { requires cplusplus11 module algorithm { header "experimental/algorithm" export * } module coroutine { requires coroutines header "experimental/coroutine" export * } module deque { header "experimental/deque" export * } module filesystem { header "experimental/filesystem" export * } module forward_list { header "experimental/forward_list" export * } module functional { header "experimental/functional" export * } module iterator { header "experimental/iterator" export * } module list { header "experimental/list" export * } module map { header "experimental/map" export * } module memory_resource { header "experimental/memory_resource" export * } module propagate_const { header "experimental/propagate_const" export * } module regex { header "experimental/regex" export * } module simd { header "experimental/simd" export * } module set { header "experimental/set" export * } module span { header "span" export * } module string { header "experimental/string" export * } module type_traits { header "experimental/type_traits" export * } module unordered_map { header "experimental/unordered_map" export * } module unordered_set { header "experimental/unordered_set" export * } module utility { header "experimental/utility" export * } module vector { header "experimental/vector" export * } // FIXME these should be private module __memory { header "experimental/__memory" export * } } // end experimental }