// -*- C++ -*- [std.modules] module std
// Copyright The GNU Toolchain Authors.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// .
module;
// stdc++.h doesn't include because of TBB issues;
// FIXME for now let's avoid the problem by suppressing TBB.
#define _GLIBCXX_USE_TBB_PAR_BACKEND 0
#include
#include
// Module std does include deprecated library interfaces.
#undef __DEPRECATED
#include
export module std;
// C library exports are appended from std-clib.cc.in.
// 27.4
export namespace std
{
namespace ranges
{
using std::ranges::in_found_result;
using std::ranges::in_fun_result;
using std::ranges::in_in_out_result;
using std::ranges::in_in_result;
using std::ranges::in_out_out_result;
using std::ranges::in_out_result;
using std::ranges::min_max_result;
}
using std::all_of;
namespace ranges
{
using std::ranges::all_of;
}
using std::any_of;
namespace ranges
{
using std::ranges::any_of;
}
using std::none_of;
namespace ranges
{
using std::ranges::none_of;
}
using std::for_each;
namespace ranges
{
using std::ranges::for_each;
using std::ranges::for_each_result;
}
using std::for_each_n;
namespace ranges
{
using std::ranges::for_each_n;
using std::ranges::for_each_n_result;
}
using std::find;
using std::find_if;
using std::find_if_not;
namespace ranges
{
using std::ranges::find;
using std::ranges::find_if;
using std::ranges::find_if_not;
}
using std::find_end;
namespace ranges
{
using std::ranges::find_end;
}
using std::find_first_of;
namespace ranges
{
using std::ranges::find_first_of;
}
using std::adjacent_find;
namespace ranges
{
using std::ranges::adjacent_find;
}
using std::count;
using std::count_if;
namespace ranges
{
using std::ranges::count;
using std::ranges::count_if;
}
using std::mismatch;
namespace ranges
{
using std::ranges::mismatch;
using std::ranges::mismatch_result;
}
using std::equal;
namespace ranges
{
using std::ranges::equal;
}
using std::is_permutation;
namespace ranges
{
using std::ranges::is_permutation;
}
using std::search;
namespace ranges
{
using std::ranges::search;
}
using std::search_n;
namespace ranges
{
using std::ranges::search_n;
}
namespace ranges
{}
using std::copy;
namespace ranges
{
using std::ranges::copy;
using std::ranges::copy_result;
}
using std::copy_n;
namespace ranges
{
using std::ranges::copy_n;
using std::ranges::copy_n_result;
}
using std::copy_if;
namespace ranges
{
using std::ranges::copy_if;
using std::ranges::copy_if_result;
}
using std::copy_backward;
namespace ranges
{
using std::ranges::copy_backward;
using std::ranges::copy_backward_result;
}
using std::move;
namespace ranges
{
using std::ranges::move;
using std::ranges::move_result;
}
using std::move_backward;
namespace ranges
{
using std::ranges::move_backward;
using std::ranges::move_backward_result;
}
using std::swap_ranges;
namespace ranges
{
using std::ranges::swap_ranges;
using std::ranges::swap_ranges_result;
}
using std::iter_swap;
using std::transform;
namespace ranges
{
using std::ranges::binary_transform_result;
using std::ranges::transform;
using std::ranges::unary_transform_result;
}
using std::replace;
using std::replace_if;
namespace ranges
{
using std::ranges::replace;
using std::ranges::replace_if;
}
using std::replace_copy;
using std::replace_copy_if;
namespace ranges
{
using std::ranges::replace_copy;
using std::ranges::replace_copy_if;
using std::ranges::replace_copy_if_result;
using std::ranges::replace_copy_result;
}
using std::fill;
using std::fill_n;
namespace ranges
{
using std::ranges::fill;
using std::ranges::fill_n;
}
using std::generate;
using std::generate_n;
namespace ranges
{
using std::ranges::generate;
using std::ranges::generate_n;
}
using std::remove;
using std::remove_if;
namespace ranges
{
using std::ranges::remove;
using std::ranges::remove_if;
}
using std::remove_copy;
using std::remove_copy_if;
namespace ranges
{
using std::ranges::remove_copy;
using std::ranges::remove_copy_if;
using std::ranges::remove_copy_if_result;
using std::ranges::remove_copy_result;
}
using std::unique;
namespace ranges
{
using std::ranges::unique;
}
using std::unique_copy;
namespace ranges
{
using std::ranges::unique_copy;
using std::ranges::unique_copy_result;
}
using std::reverse;
namespace ranges
{
using std::ranges::reverse;
}
using std::reverse_copy;
namespace ranges
{
using std::ranges::reverse_copy;
using std::ranges::reverse_copy_result;
}
using std::rotate;
namespace ranges
{
using std::ranges::rotate;
}
using std::rotate_copy;
namespace ranges
{
using std::ranges::rotate_copy;
using std::ranges::rotate_copy_result;
}
using std::sample;
namespace ranges
{
using std::ranges::sample;
}
using std::shuffle;
namespace ranges
{
using std::ranges::shuffle;
}
using std::shift_left;
namespace ranges
{}
using std::shift_right;
namespace ranges
{}
using std::sort;
namespace ranges
{
using std::ranges::sort;
}
using std::stable_sort;
namespace ranges
{
using std::ranges::stable_sort;
}
using std::partial_sort;
namespace ranges
{
using std::ranges::partial_sort;
}
using std::partial_sort_copy;
namespace ranges
{
using std::ranges::partial_sort_copy;
using std::ranges::partial_sort_copy_result;
}
using std::is_sorted;
using std::is_sorted_until;
namespace ranges
{
using std::ranges::is_sorted;
using std::ranges::is_sorted_until;
}
using std::nth_element;
namespace ranges
{
using std::ranges::nth_element;
}
using std::lower_bound;
namespace ranges
{
using std::ranges::lower_bound;
}
using std::upper_bound;
namespace ranges
{
using std::ranges::upper_bound;
}
using std::equal_range;
namespace ranges
{
using std::ranges::equal_range;
}
using std::binary_search;
namespace ranges
{
using std::ranges::binary_search;
}
using std::is_partitioned;
namespace ranges
{
using std::ranges::is_partitioned;
}
using std::partition;
namespace ranges
{
using std::ranges::partition;
}
using std::stable_partition;
namespace ranges
{
using std::ranges::stable_partition;
}
using std::partition_copy;
namespace ranges
{
using std::ranges::partition_copy;
using std::ranges::partition_copy_result;
}
using std::partition_point;
namespace ranges
{
using std::ranges::partition_point;
}
using std::merge;
namespace ranges
{
using std::ranges::merge;
using std::ranges::merge_result;
}
using std::inplace_merge;
namespace ranges
{
using std::ranges::inplace_merge;
}
using std::includes;
namespace ranges
{
using std::ranges::includes;
}
using std::set_union;
namespace ranges
{
using std::ranges::set_union;
using std::ranges::set_union_result;
}
using std::set_intersection;
namespace ranges
{
using std::ranges::set_intersection;
using std::ranges::set_intersection_result;
}
using std::set_difference;
namespace ranges
{
using std::ranges::set_difference;
using std::ranges::set_difference_result;
}
using std::set_symmetric_difference;
namespace ranges
{
using std::ranges::set_symmetric_difference;
using std::ranges::set_symmetric_difference_result;
}
using std::push_heap;
namespace ranges
{
using std::ranges::push_heap;
}
using std::pop_heap;
namespace ranges
{
using std::ranges::pop_heap;
}
using std::make_heap;
namespace ranges
{
using std::ranges::make_heap;
}
using std::sort_heap;
namespace ranges
{
using std::ranges::sort_heap;
}
using std::is_heap;
namespace ranges
{
using std::ranges::is_heap;
}
using std::is_heap_until;
namespace ranges
{
using std::ranges::is_heap_until;
}
using std::min;
namespace ranges
{
using std::ranges::min;
}
using std::max;
namespace ranges
{
using std::ranges::max;
}
using std::minmax;
namespace ranges
{
using std::ranges::minmax;
using std::ranges::minmax_result;
}
using std::min_element;
namespace ranges
{
using std::ranges::min_element;
}
using std::max_element;
namespace ranges
{
using std::ranges::max_element;
}
using std::minmax_element;
namespace ranges
{
using std::ranges::minmax_element;
using std::ranges::minmax_element_result;
}
using std::clamp;
namespace ranges
{
using std::ranges::clamp;
}
using std::lexicographical_compare;
namespace ranges
{
using std::ranges::lexicographical_compare;
}
using std::lexicographical_compare_three_way;
using std::next_permutation;
namespace ranges
{
using std::ranges::next_permutation;
using std::ranges::next_permutation_result;
}
using std::prev_permutation;
namespace ranges
{
using std::ranges::prev_permutation;
using std::ranges::prev_permutation_result;
}
namespace ranges
{
#if __cpp_lib_ranges_contains
using ranges::contains;
using ranges::contains_subrange;
#endif
#if __cpp_lib_ranges_fold
using ranges::fold_left;
using ranges::fold_left_first;
using ranges::fold_left_first_with_iter;
using ranges::fold_left_with_iter;
using ranges::fold_right;
using ranges::fold_right_last;
using ranges::in_value_result;
using ranges::out_value_result;
#endif
#if __cpp_lib_ranges_find_last
using ranges::find_last;
using ranges::find_last_if;
using ranges::find_last_if_not;
#endif
}
}
// 22.7.2
#if __cpp_lib_any
export namespace std
{
using std::any;
using std::any_cast;
using std::bad_any_cast;
using std::make_any;
using std::swap;
}
#endif
// 24.3.2
export namespace std
{
using std::array;
using std::operator==;
using std::operator<=>;
using std::get;
using std::swap;
using std::to_array;
using std::tuple_element;
using std::tuple_size;
}
// 33.5.2
export namespace std
{
using std::atomic;
using std::atomic_bool;
using std::atomic_char;
using std::atomic_char16_t;
using std::atomic_char32_t;
using std::atomic_char8_t;
using std::atomic_compare_exchange_strong;
using std::atomic_compare_exchange_strong_explicit;
using std::atomic_compare_exchange_weak;
using std::atomic_compare_exchange_weak_explicit;
using std::atomic_exchange;
using std::atomic_exchange_explicit;
using std::atomic_fetch_add;
using std::atomic_fetch_add_explicit;
using std::atomic_fetch_and;
using std::atomic_fetch_and_explicit;
using std::atomic_fetch_or;
using std::atomic_fetch_or_explicit;
using std::atomic_fetch_sub;
using std::atomic_fetch_sub_explicit;
using std::atomic_fetch_xor;
using std::atomic_fetch_xor_explicit;
using std::atomic_flag;
using std::atomic_flag_clear;
using std::atomic_flag_clear_explicit;
using std::atomic_flag_notify_all;
using std::atomic_flag_notify_one;
using std::atomic_flag_test;
using std::atomic_flag_test_and_set;
using std::atomic_flag_test_and_set_explicit;
using std::atomic_flag_test_explicit;
using std::atomic_flag_wait;
using std::atomic_flag_wait_explicit;
using std::atomic_init;
using std::atomic_int;
using std::atomic_int16_t;
using std::atomic_int32_t;
using std::atomic_int64_t;
using std::atomic_int8_t;
using std::atomic_int_fast16_t;
using std::atomic_int_fast32_t;
using std::atomic_int_fast64_t;
using std::atomic_int_fast8_t;
using std::atomic_int_least16_t;
using std::atomic_int_least32_t;
using std::atomic_int_least64_t;
using std::atomic_int_least8_t;
using std::atomic_intmax_t;
using std::atomic_intptr_t;
using std::atomic_is_lock_free;
using std::atomic_llong;
using std::atomic_load;
using std::atomic_load_explicit;
using std::atomic_long;
using std::atomic_notify_all;
using std::atomic_notify_one;
using std::atomic_ptrdiff_t;
using std::atomic_ref;
using std::atomic_schar;
using std::atomic_short;
using std::atomic_signal_fence;
using std::atomic_signed_lock_free;
using std::atomic_size_t;
using std::atomic_store;
using std::atomic_store_explicit;
using std::atomic_thread_fence;
using std::atomic_uchar;
using std::atomic_uint;
using std::atomic_uint16_t;
using std::atomic_uint32_t;
using std::atomic_uint64_t;
using std::atomic_uint8_t;
using std::atomic_uint_fast16_t;
using std::atomic_uint_fast32_t;
using std::atomic_uint_fast64_t;
using std::atomic_uint_fast8_t;
using std::atomic_uint_least16_t;
using std::atomic_uint_least32_t;
using std::atomic_uint_least64_t;
using std::atomic_uint_least8_t;
using std::atomic_uintmax_t;
using std::atomic_uintptr_t;
using std::atomic_ullong;
using std::atomic_ulong;
using std::atomic_unsigned_lock_free;
using std::atomic_ushort;
using std::atomic_wait;
using std::atomic_wait_explicit;
using std::atomic_wchar_t;
using std::kill_dependency;
using std::memory_order;
using std::memory_order_acq_rel;
using std::memory_order_acquire;
using std::memory_order_consume;
using std::memory_order_relaxed;
using std::memory_order_release;
using std::memory_order_seq_cst;
// ATOMIC_*_LOCK_FREE not exported
}
// 33.9.3
#if __cpp_lib_barrier
export namespace std
{
using std::barrier;
}
#endif
// 22.15
export namespace std
{
using std::bit_cast;
using std::bit_ceil;
using std::bit_floor;
using std::bit_width;
using std::countl_one;
using std::countl_zero;
using std::countr_one;
using std::countr_zero;
using std::endian;
using std::has_single_bit;
using std::popcount;
using std::rotl;
using std::rotr;
}
// 22.9
export namespace std
{
using std::bitset;
using std::operator&;
using std::operator|;
using std::operator^;
using std::operator>>;
using std::operator<<;
using std::hash;
}
// 22.13
export namespace std
{
using std::chars_format;
using std::operator&;
using std::operator&=;
using std::operator^;
using std::operator^=;
using std::operator|;
using std::operator|=;
using std::operator~;
using std::from_chars;
using std::from_chars_result;
using std::to_chars;
using std::to_chars_result;
}
// 29.2
#if __cpp_lib_chrono
export namespace std
{
namespace chrono
{
using std::chrono::duration;
using std::chrono::time_point;
}
using std::common_type;
namespace chrono
{
using std::chrono::duration_values;
using std::chrono::treat_as_floating_point;
using std::chrono::treat_as_floating_point_v;
using std::chrono::operator+;
using std::chrono::operator-;
using std::chrono::operator*;
using std::chrono::operator/;
using std::chrono::operator%;
using std::chrono::operator==;
using std::chrono::operator<;
using std::chrono::operator>;
using std::chrono::operator<=;
using std::chrono::operator>=;
using std::chrono::operator<=>;
using std::chrono::ceil;
using std::chrono::duration_cast;
using std::chrono::floor;
using std::chrono::round;
using std::chrono::operator<<;
using std::chrono::abs;
using std::chrono::day;
using std::chrono::days;
using std::chrono::file_clock;
using std::chrono::file_time;
using std::chrono::hh_mm_ss;
using std::chrono::high_resolution_clock;
using std::chrono::hours;
using std::chrono::is_am;
using std::chrono::is_pm;
using std::chrono::last_spec;
using std::chrono::local_days;
using std::chrono::local_seconds;
using std::chrono::local_t;
using std::chrono::local_time;
using std::chrono::make12;
using std::chrono::make24;
using std::chrono::microseconds;
using std::chrono::milliseconds;
using std::chrono::minutes;
using std::chrono::month;
using std::chrono::month_day;
using std::chrono::month_day_last;
using std::chrono::month_weekday;
using std::chrono::month_weekday_last;
using std::chrono::months;
using std::chrono::nanoseconds;
using std::chrono::seconds;
using std::chrono::steady_clock;
using std::chrono::sys_days;
using std::chrono::sys_seconds;
using std::chrono::sys_time;
using std::chrono::system_clock;
using std::chrono::time_point_cast;
using std::chrono::weekday;
using std::chrono::weekday_indexed;
using std::chrono::weekday_last;
using std::chrono::weeks;
using std::chrono::year;
using std::chrono::year_month;
using std::chrono::year_month_day;
using std::chrono::year_month_day_last;
using std::chrono::year_month_weekday;
using std::chrono::year_month_weekday_last;
using std::chrono::years;
}
using std::formatter;
namespace chrono
{
using std::chrono::April;
using std::chrono::August;
using std::chrono::December;
using std::chrono::February;
using std::chrono::Friday;
using std::chrono::January;
using std::chrono::July;
using std::chrono::June;
using std::chrono::last;
using std::chrono::March;
using std::chrono::May;
using std::chrono::Monday;
using std::chrono::November;
using std::chrono::October;
using std::chrono::Saturday;
using std::chrono::September;
using std::chrono::Sunday;
using std::chrono::Thursday;
using std::chrono::Tuesday;
using std::chrono::Wednesday;
using chrono::utc_clock;
using chrono::utc_time;
using chrono::utc_seconds;
using chrono::tai_clock;
using chrono::tai_time;
using chrono::tai_seconds;
using chrono::gps_clock;
using chrono::gps_time;
using chrono::gps_seconds;
using chrono::clock_cast;
using chrono::parse;
using chrono::from_stream;
using chrono::clock_time_conversion;
#if __cpp_lib_chrono >= 201907L
using chrono::tzdb;
using chrono::tzdb_list;
using chrono::get_tzdb;
using chrono::get_tzdb_list;
using chrono::locate_zone;
using chrono::current_zone;
using chrono::reload_tzdb;
using chrono::remote_version;
using chrono::nonexistent_local_time;
using chrono::ambiguous_local_time;
using chrono::sys_info;
using chrono::local_info;
using chrono::choose;
using chrono::time_zone;
using chrono::zoned_traits;
using chrono::zoned_time;
using chrono::zoned_seconds;
using chrono::leap_second;
using chrono::leap_second_info;
using chrono::get_leap_second_info;
using chrono::time_zone_link;
using chrono::local_time_format;
#endif
using chrono::is_clock;
using chrono::is_clock_v;
}
}
export namespace std::inline literals::inline chrono_literals
{
using std::literals::chrono_literals::operator""h;
using std::literals::chrono_literals::operator""min;
using std::literals::chrono_literals::operator""s;
using std::literals::chrono_literals::operator""ms;
using std::literals::chrono_literals::operator""us;
using std::literals::chrono_literals::operator""ns;
using std::literals::chrono_literals::operator""d;
using std::literals::chrono_literals::operator""y;
}
export namespace std::chrono {
using namespace literals::chrono_literals;
}
#endif // __cpp_lib_chrono
// : deprecated C++17, removed C++26
export namespace std
{
using std::codecvt_mode;
using std::codecvt_utf16;
using std::codecvt_utf8;
using std::codecvt_utf8_utf16;
}
// 17.11.1
#if __cpp_lib_three_way_comparison
export namespace std
{
using std::common_comparison_category;
using std::common_comparison_category_t;
using std::compare_three_way;
using std::compare_three_way_result;
using std::compare_three_way_result_t;
using std::is_eq;
using std::is_gt;
using std::is_gteq;
using std::is_lt;
using std::is_lteq;
using std::is_neq;
using std::partial_ordering;
using std::strong_ordering;
using std::three_way_comparable;
using std::three_way_comparable_with;
using std::weak_ordering;
using std::compare_partial_order_fallback;
using std::compare_strong_order_fallback;
using std::compare_weak_order_fallback;
using std::partial_order;
using std::strong_order;
using std::weak_order;
}
#endif // __cpp_lib_three_way_comparison
// 28.4
export namespace std
{
using std::complex;
using std::operator+;
using std::operator-;
using std::operator*;
using std::operator/;
using std::operator==;
using std::operator>>;
using std::operator<<;
using std::abs;
using std::acos;
using std::acosh;
using std::arg;
using std::asin;
using std::asinh;
using std::atan;
using std::atanh;
using std::conj;
using std::cos;
using std::cosh;
using std::exp;
using std::imag;
using std::log;
using std::log10;
using std::norm;
using std::polar;
using std::pow;
using std::proj;
using std::real;
using std::sin;
using std::sinh;
using std::sqrt;
using std::tan;
using std::tanh;
}
export namespace std::inline literals::inline complex_literals
{
using std::operator""il;
using std::operator""i;
using std::operator""if;
}
// 18
#if __cpp_lib_concepts
export namespace std
{
using std::assignable_from;
using std::common_reference_with;
using std::common_with;
using std::convertible_to;
using std::derived_from;
using std::floating_point;
using std::integral;
using std::same_as;
using std::signed_integral;
using std::unsigned_integral;
namespace ranges
{
using std::ranges::swap;
}
using std::constructible_from;
using std::copy_constructible;
using std::copyable;
using std::default_initializable;
using std::destructible;
using std::equality_comparable;
using std::equality_comparable_with;
using std::equivalence_relation;
using std::invocable;
using std::movable;
using std::move_constructible;
using std::predicate;
using std::regular;
using std::regular_invocable;
using std::relation;
using std::semiregular;
using std::strict_weak_order;
using std::swappable;
using std::swappable_with;
using std::totally_ordered;
using std::totally_ordered_with;
}
#endif
// 33.7
export namespace std
{
using std::condition_variable;
using std::condition_variable_any;
using std::cv_status;
using std::notify_all_at_thread_exit;
}
// 17.12.2
#if __cpp_lib_coroutine
export namespace std
{
using std::coroutine_handle;
using std::coroutine_traits;
using std::operator==;
using std::operator<=>;
using std::hash;
using std::noop_coroutine;
using std::noop_coroutine_handle;
using std::noop_coroutine_promise;
using std::suspend_always;
using std::suspend_never;
}
#endif // __cpp_lib_coroutine
// 22.16
#if __cpp_lib_debugging
export namespace std
{
using std::breakpoint;
using std::breakpoint_if_debugging;
using std::is_debugger_present;
}
#endif
// 24.3
export namespace std
{
using std::deque;
using std::operator==;
using std::operator<=>;
using std::erase;
using std::erase_if;
using std::swap;
namespace pmr
{
using std::pmr::deque;
}
}
// 17.9.2
export namespace std
{
using std::bad_exception;
using std::current_exception;
using std::exception;
using std::exception_ptr;
using std::get_terminate;
using std::make_exception_ptr;
using std::nested_exception;
using std::rethrow_exception;
using std::rethrow_if_nested;
using std::set_terminate;
using std::terminate;
using std::terminate_handler;
using std::throw_with_nested;
using std::uncaught_exception;
using std::uncaught_exceptions;
}
// 34.4
#if __cpp_lib_execution
export namespace std
{
using std::is_execution_policy;
using std::is_execution_policy_v;
namespace execution
{
using std::execution::sequenced_policy;
using std::execution::parallel_policy;
using std::execution::parallel_unsequenced_policy;
using std::execution::unsequenced_policy;
using std::execution::seq;
using std::execution::par;
using std::execution::par_unseq;
using std::execution::unseq;
}
#if __cpp_lib_senders
using std::forwarding_query_t;
using std::get_allocator_t;
using std::get_stop_token_t;
using std::forwarding_query;
using std::get_allocator;
using std::get_stop_token;
using std::stop_token_of_t;
namespace execution
{
using std::execution::get_domain_t;
using std::execution::get_scheduler_t;
using std::execution::get_delegation_scheduler_t;
using std::execution::get_forward_progress_guarantee_t;
using std::execution::get_completion_scheduler_t;
using std::execution::get_domain;
using std::execution::get_scheduler;
using std::execution::get_delegation_scheduler;
using std::execution::forward_progress_guarantee;
using std::execution::get_forward_progress_guarantee;
using std::execution::get_completion_scheduler;
using std::execution::empty_env;
using std::execution::get_env_t;
using std::execution::get_env;
using std::execution::env_of_t;
using std::execution::default_domain;
using std::execution::scheduler_t;
using std::execution::scheduler;
using std::execution::receiver_t;
using std::execution::receiver;
using std::execution::receiver_of;
using std::execution::set_value_t;
using std::execution::set_error_t;
using std::execution::set_stopped_t;
using std::execution::set_value;
using std::execution::set_error;
using std::execution::set_stopped;
using std::execution::operation_state_t;
using std::execution::operation_state;
using std::execution::start_t;
using std::execution::start;
using std::execution::sender_t;
using std::execution::sender;
using std::execution::sender_in;
using std::execution::sender_to;
using std::execution::get_completion_signatures_t;
using std::execution::get_completion_signatures;
using std::execution::completion_signatures_of_t;
using std::execution::value_types_of_t;
using std::execution::error_types_of_t;
using std::execution::sends_stopped;
using std::execution::tag_of_t;
using std::execution::transform_sender;
using std::execution::transform_env;
using std::execution::apply_sender;
using std::execution::connect_t;
using std::execution::connect;
using std::execution::connect_result_t;
using std::execution::just_t;
using std::execution::just_error_t;
using std::execution::just_stopped_t;
using std::execution::schedule_t;
using std::execution::just;
using std::execution::just_error;
using std::execution::just_stopped;
using std::execution::schedule;
using std::execution::read_env;
using std::execution::schedule_result_t;
using std::execution::sender_adaptor_closure;
using std::execution::starts_on_t;
using std::execution::continues_on_t;
using std::execution::on_t;
using std::execution::schedule_from_t;
using std::execution::then_t;
using std::execution::upon_error_t;
using std::execution::upon_stopped_t;
using std::execution::let_value_t;
using std::execution::let_error_t;
using std::execution::let_stopped_t;
using std::execution::bulk_t;
using std::execution::split_t;
using std::execution::when_all_t;
using std::execution::when_all_with_variant_t;
using std::execution::into_variant_t;
using std::execution::stopped_as_optional_t;
using std::execution::stopped_as_error_t;
using std::execution::starts_on;
using std::execution::continues_on;
using std::execution::on;
using std::execution::schedule_from;
using std::execution::then;
using std::execution::upon_error;
using std::execution::upon_stopped;
using std::execution::let_value;
using std::execution::let_error;
using std::execution::let_stopped;
using std::execution::bulk;
using std::execution::split;
using std::execution::when_all;
using std::execution::when_all_with_variant;
using std::execution::into_variant;
using std::execution::stopped_as_optional;
using std::execution::stopped_as_error;
using std::execution::completion_signatures;
using std::execution::transform_completion_signatures;
using std::execution::transform_completion_signatures_of;
using std::execution::run_loop;
}
namespace this_thread
{
using std::this_thread::sync_wait_t;
using std::this_thread::sync_wait_with_variant_t;
using std::this_thread::sync_wait;
using std::this_thread::sync_wait_with_variant;
}
#endif // __cpp_lib_senders
}
#endif // __cpp_lib_execution
// 22.8
#if __cpp_lib_expected
export namespace std
{
using std::unexpected;
using std::bad_expected_access;
using std::unexpect_t;
using std::unexpect;
using std::expected;
}
#endif
//
#if __cpp_lib_filesystem
export namespace std::filesystem
{
using std::filesystem::begin;
using std::filesystem::copy_options;
using std::filesystem::directory_entry;
using std::filesystem::directory_iterator;
using std::filesystem::directory_options;
using std::filesystem::end;
using std::filesystem::file_status;
using std::filesystem::file_time_type;
using std::filesystem::file_type;
using std::filesystem::filesystem_error;
using std::filesystem::hash_value;
using std::filesystem::path;
using std::filesystem::perm_options;
using std::filesystem::perms;
using std::filesystem::recursive_directory_iterator;
using std::filesystem::space_info;
using std::filesystem::swap;
using std::filesystem::operator&;
using std::filesystem::operator&=;
using std::filesystem::operator^;
using std::filesystem::operator^=;
using std::filesystem::operator|;
using std::filesystem::operator|=;
using std::filesystem::operator~;
using std::filesystem::absolute;
using std::filesystem::canonical;
using std::filesystem::copy;
using std::filesystem::copy_file;
using std::filesystem::copy_symlink;
using std::filesystem::create_directories;
using std::filesystem::create_directory;
using std::filesystem::create_directory_symlink;
using std::filesystem::create_hard_link;
using std::filesystem::create_symlink;
using std::filesystem::current_path;
using std::filesystem::equivalent;
using std::filesystem::exists;
using std::filesystem::file_size;
using std::filesystem::hard_link_count;
using std::filesystem::is_block_file;
using std::filesystem::is_character_file;
using std::filesystem::is_directory;
using std::filesystem::is_empty;
using std::filesystem::is_fifo;
using std::filesystem::is_other;
using std::filesystem::is_regular_file;
using std::filesystem::is_socket;
using std::filesystem::is_symlink;
using std::filesystem::last_write_time;
using std::filesystem::permissions;
using std::filesystem::proximate;
using std::filesystem::read_symlink;
using std::filesystem::relative;
using std::filesystem::remove;
using std::filesystem::remove_all;
using std::filesystem::rename;
using std::filesystem::resize_file;
using std::filesystem::space;
using std::filesystem::status;
using std::filesystem::status_known;
using std::filesystem::symlink_status;
using std::filesystem::temp_directory_path;
using std::filesystem::u8path;
using std::filesystem::weakly_canonical;
}
#endif // __cpp_lib_filesystem
//
#if __cpp_lib_flat_map
export namespace std
{
using std::flat_map;
using std::flat_multimap;
using std::sorted_equivalent;
using std::sorted_equivalent_t;
using std::sorted_unique;
using std::sorted_unique_t;
}
#endif
//
#if __cpp_lib_flat_set
export namespace std
{
using std::flat_set;
using std::flat_multiset;
using std::sorted_equivalent;
using std::sorted_equivalent_t;
using std::sorted_unique;
using std::sorted_unique_t;
}
#endif
//
export namespace std
{
using std::basic_format_arg;
using std::basic_format_args;
using std::basic_format_context;
using std::basic_format_parse_context;
using std::basic_format_string;
using std::format;
using std::format_args;
using std::format_context;
using std::format_error;
using std::format_parse_context;
using std::format_string;
using std::format_to;
using std::format_to_n;
using std::format_to_n_result;
using std::formatted_size;
// FIXME __cpp_lib_format_ranges
#if __cplusplus > 202002L
using std::formattable;
#endif
using std::formatter;
using std::make_format_args;
using std::make_wformat_args;
#if __cpp_lib_format >= 202311L // >= C++26
using std::runtime_format;
#endif
using std::vformat;
using std::vformat_to;
using std::visit_format_arg;
using std::wformat_args;
using std::wformat_context;
using std::wformat_parse_context;
using std::wformat_string;
}
//
export namespace std
{
using std::forward_list;
using std::operator==;
using std::operator<=>;
using std::erase;
using std::erase_if;
using std::swap;
namespace pmr
{
using std::pmr::forward_list;
}
}
//
export namespace std
{
using std::basic_filebuf;
using std::basic_fstream;
using std::basic_ifstream;
using std::basic_ofstream;
using std::filebuf;
using std::fstream;
using std::ifstream;
using std::ofstream;
using std::swap;
using std::wfilebuf;
using std::wfstream;
using std::wifstream;
using std::wofstream;
}
//
export namespace std
{
using std::bind;
using std::bind_front;
#if __cpp_lib_bind_back
using std::bind_back;
#endif
using std::bit_and;
using std::bit_not;
using std::bit_or;
using std::bit_xor;
using std::compare_three_way;
using std::cref;
using std::divides;
using std::equal_to;
using std::greater;
using std::greater_equal;
using std::identity;
using std::invoke;
#if __cpp_lib_invoke_r
using std::invoke_r;
#endif
using std::is_bind_expression;
using std::is_bind_expression_v;
using std::is_placeholder;
using std::is_placeholder_v;
using std::less;
using std::less_equal;
using std::logical_and;
using std::logical_not;
using std::logical_or;
using std::minus;
using std::modulus;
#if __cpp_lib_move_only_function
using std::move_only_function;
#endif
using std::multiplies;
using std::negate;
using std::not_equal_to;
using std::not_fn;
using std::plus;
using std::ref;
using std::reference_wrapper;
namespace placeholders
{
using std::placeholders::_1;
using std::placeholders::_10;
using std::placeholders::_2;
using std::placeholders::_3;
using std::placeholders::_4;
using std::placeholders::_5;
using std::placeholders::_6;
using std::placeholders::_7;
using std::placeholders::_8;
using std::placeholders::_9;
}
using std::bad_function_call;
using std::function;
using std::mem_fn;
using std::swap;
using std::operator==;
using std::boyer_moore_horspool_searcher;
using std::boyer_moore_searcher;
using std::default_searcher;
using std::hash;
namespace ranges
{
using std::ranges::equal_to;
using std::ranges::greater;
using std::ranges::greater_equal;
using std::ranges::less;
using std::ranges::less_equal;
using std::ranges::not_equal_to;
}
}
//
export namespace std
{
using std::future_errc;
using std::future_status;
using std::launch;
using std::operator&;
using std::operator&=;
using std::operator^;
using std::operator^=;
using std::operator|;
using std::operator|=;
using std::operator~;
using std::async;
using std::future;
using std::future_category;
using std::future_error;
using std::is_error_code_enum;
using std::make_error_code;
using std::make_error_condition;
using std::packaged_task;
using std::promise;
using std::shared_future;
using std::swap;
using std::uses_allocator;
}
#if __cpp_lib_generator
export namespace std
{
using std::generator;
namespace pmr
{
using pmr::generator;
}
}
#endif
// FIXME
// 17.10.2
export namespace std
{
using std::begin;
using std::end;
using std::initializer_list;
}
// FIXME
//
export namespace std
{
using std::get_money;
using std::get_time;
using std::put_money;
using std::put_time;
using std::quoted;
using std::resetiosflags;
using std::setbase;
using std::setfill;
using std::setiosflags;
using std::setprecision;
using std::setw;
}
//
export namespace std
{
using std::fpos;
using std::operator!=;
using std::operator-;
using std::operator==;
using std::basic_ios;
using std::boolalpha;
using std::dec;
using std::defaultfloat;
using std::fixed;
using std::hex;
using std::hexfloat;
using std::internal;
using std::io_errc;
using std::ios;
using std::ios_base;
using std::iostream_category;
using std::is_error_code_enum;
using std::left;
using std::make_error_code;
using std::make_error_condition;
using std::noboolalpha;
using std::noshowbase;
using std::noshowpoint;
using std::noshowpos;
using std::noskipws;
using std::nounitbuf;
using std::nouppercase;
using std::oct;
using std::right;
using std::scientific;
using std::showbase;
using std::showpoint;
using std::showpos;
using std::skipws;
using std::streamoff;
using std::streamsize;
using std::unitbuf;
using std::uppercase;
using std::wios;
}
//
export namespace std
{
using std::streampos;
using std::u16streampos;
using std::u32streampos;
using std::u8streampos;
using std::wstreampos;
using std::basic_osyncstream;
using std::basic_syncbuf;
using std::istreambuf_iterator;
using std::ostreambuf_iterator;
using std::osyncstream;
using std::syncbuf;
using std::wosyncstream;
using std::wsyncbuf;
using std::fpos;
}
//
export namespace std
{
using std::cerr;
using std::cin;
using std::clog;
using std::cout;
using std::wcerr;
using std::wcin;
using std::wclog;
using std::wcout;
}
//
export namespace std
{
using std::basic_iostream;
using std::basic_istream;
using std::iostream;
using std::istream;
using std::wiostream;
using std::wistream;
using std::ws;
using std::operator>>;
}
//
export namespace std
{
using std::incrementable_traits;
using std::indirectly_readable_traits;
using std::iter_difference_t;
using std::iter_reference_t;
using std::iter_value_t;
using std::iterator_traits;
// _Cpo is an implementation detail we can't avoid exposing; if we do the
// using in ranges directly, it conflicts with any friend functions of the
// same name, which is why the customization points are in an inline
// namespace in the first place.
namespace ranges::inline _Cpo
{
using _Cpo::iter_move;
using _Cpo::iter_swap;
}
using std::advance;
using std::bidirectional_iterator;
using std::bidirectional_iterator_tag;
using std::contiguous_iterator;
using std::contiguous_iterator_tag;
using std::disable_sized_sentinel_for;
using std::distance;
using std::forward_iterator;
using std::forward_iterator_tag;
using std::incrementable;
using std::indirect_binary_predicate;
using std::indirect_equivalence_relation;
using std::indirect_result_t;
using std::indirect_strict_weak_order;
using std::indirect_unary_predicate;
using std::indirectly_comparable;
using std::indirectly_copyable;
using std::indirectly_copyable_storable;
using std::indirectly_movable;
using std::indirectly_movable_storable;
using std::indirectly_readable;
using std::indirectly_regular_unary_invocable;
using std::indirectly_swappable;
using std::indirectly_unary_invocable;
using std::indirectly_writable;
using std::input_iterator;
using std::input_iterator_tag;
using std::input_or_output_iterator;
using std::iter_common_reference_t;
using std::iter_rvalue_reference_t;
using std::mergeable;
using std::next;
using std::output_iterator;
using std::output_iterator_tag;
using std::permutable;
using std::prev;
using std::projected;
using std::random_access_iterator;
using std::random_access_iterator_tag;
using std::sentinel_for;
using std::sized_sentinel_for;
using std::sortable;
using std::weakly_incrementable;
namespace ranges
{
using std::ranges::advance;
using std::ranges::distance;
using std::ranges::next;
using std::ranges::prev;
}
using std::reverse_iterator;
using std::operator==;
using std::operator!=;
using std::operator<;
using std::operator>;
using std::operator<=;
using std::operator>=;
using std::operator<=>;
using std::operator-;
using std::operator+;
using std::back_insert_iterator;
using std::back_inserter;
using std::begin;
using std::cbegin;
using std::cend;
using std::common_iterator;
using std::counted_iterator;
using std::crbegin;
using std::crend;
using std::data;
using std::default_sentinel;
using std::default_sentinel_t;
using std::empty;
using std::end;
using std::front_insert_iterator;
using std::front_inserter;
using std::insert_iterator;
using std::inserter;
using std::istream_iterator;
using std::istreambuf_iterator;
using std::iterator;
using std::make_move_iterator;
using std::make_reverse_iterator;
using std::move_iterator;
using std::move_sentinel;
using std::ostream_iterator;
using std::ostreambuf_iterator;
using std::rbegin;
using std::rend;
using std::size;
using std::ssize;
using std::unreachable_sentinel;
using std::unreachable_sentinel_t;
#if __glibcxx_ranges_as_const // >= C++23
using std::iter_const_reference_t;
using std::basic_const_iterator;
using std::const_iterator;
using std::const_sentinel;
using std::make_const_iterator;
using std::make_const_sentinel;
#endif
}
// FIXME these should be friends of __normal_iterator to avoid exporting
// __gnu_cxx.
export namespace __gnu_cxx
{
using __gnu_cxx::operator==;
using __gnu_cxx::operator<=>;
using __gnu_cxx::operator+;
using __gnu_cxx::operator-;
}
//
export namespace std
{
using std::latch;
}
// 17.3.3 [limits.syn]
export namespace std
{
using std::float_denorm_style; // deprecated in C++23
using std::float_round_style;
using std::numeric_limits;
}
// FIXME
//
export namespace std
{
using std::list;
using std::operator==;
using std::operator<=>;
using std::erase;
using std::erase_if;
using std::swap;
namespace pmr
{
using std::pmr::list;
}
}
//
export namespace std
{
using std::codecvt;
using std::codecvt_base;
using std::codecvt_byname;
using std::collate;
using std::collate_byname;
using std::ctype;
using std::ctype_base;
using std::ctype_byname;
using std::has_facet;
using std::isalnum;
using std::isalpha;
using std::isblank;
using std::iscntrl;
using std::isdigit;
using std::isgraph;
using std::islower;
using std::isprint;
using std::ispunct;
using std::isspace;
using std::isupper;
using std::isxdigit;
using std::locale;
using std::messages;
using std::messages_base;
using std::messages_byname;
using std::money_base;
using std::money_get;
using std::money_put;
using std::moneypunct;
using std::moneypunct_byname;
using std::num_get;
using std::num_put;
using std::numpunct;
using std::numpunct_byname;
using std::time_base;
using std::time_get;
using std::time_get_byname;
using std::time_put;
using std::time_put_byname;
using std::tolower;
using std::toupper;
using std::use_facet;
using std::wbuffer_convert;
using std::wstring_convert;
}
//