| // -*- 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 |
| // <http://www.gnu.org/licenses/>. |
| |
| module; |
| |
| // stdc++.h doesn't include <execution> because of TBB issues; |
| // FIXME for now let's avoid the problem by suppressing TBB. |
| #define _GLIBCXX_USE_TBB_PAR_BACKEND 0 |
| |
| #include <bits/stdc++.h> |
| #include <execution> |
| |
| // Module std does include deprecated library interfaces. |
| #undef __DEPRECATED |
| #include <strstream> |
| |
| export module std; |
| |
| // C library exports are appended from std-clib.cc.in. |
| |
| // 27.4 <algorithm> |
| 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 |
| #if __cpp_lib_ranges_starts_ends_with |
| using ranges::starts_with; |
| using ranges::ends_with; |
| #endif |
| } |
| } |
| |
| // 22.7.2 <any> |
| export namespace std |
| { |
| using std::any; |
| using std::any_cast; |
| using std::bad_any_cast; |
| using std::make_any; |
| using std::swap; |
| } |
| |
| // 24.3.2 <array> |
| 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 <atomic> |
| 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; |
| #ifdef __cpp_lib_atomic_lock_free_type_aliases |
| using std::atomic_signed_lock_free; |
| #endif |
| 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; |
| #ifdef __cpp_lib_atomic_lock_free_type_aliases |
| using std::atomic_unsigned_lock_free; |
| #endif |
| 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 <barrier> |
| #if __cpp_lib_barrier |
| export namespace std |
| { |
| using std::barrier; |
| } |
| #endif |
| |
| // 22.15 <bit> |
| 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 <bitset> |
| 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 <charconv> |
| 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 <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; |
| } |
| |
| // <codecvt>: 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 <compare> |
| 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; |
| } |
| |
| // 28.4 <complex> |
| 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; |
| #if __cpp_lib_tuple_like >= 202311L |
| using std::tuple_element; |
| using std::tuple_element_t; |
| using std::tuple_size; |
| using std::tuple_size_v; |
| using std::get; |
| #endif |
| } |
| export namespace std::inline literals::inline complex_literals |
| { |
| using std::operator""il; |
| using std::operator""i; |
| using std::operator""if; |
| } |
| |
| // 18 <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; |
| } |
| |
| // 33.7 <condition_variable> |
| 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 <coroutine> |
| #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 <debugging> |
| #if __cpp_lib_debugging |
| export namespace std |
| { |
| using std::breakpoint; |
| using std::breakpoint_if_debugging; |
| using std::is_debugger_present; |
| } |
| #endif |
| |
| // 24.3 <deque> |
| 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 <exception> |
| 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 <execution> |
| #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 <expected> |
| #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 |
| |
| // <filesystem> |
| #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 |
| |
| // <flat_map> |
| #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 |
| |
| // <flat_set> |
| #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 |
| |
| // <format> |
| 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; |
| #if __cpp_lib_format_ranges |
| 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; |
| #ifdef __cpp_lib_format_ranges |
| using std::format_kind; |
| using std::range_format; |
| using std::range_formatter; |
| #endif |
| } |
| |
| // <forward_list> |
| 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; |
| } |
| } |
| |
| // <fstream> |
| 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; |
| } |
| |
| // <functional> |
| 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 |
| #if __cpp_lib_copyable_function |
| using std::copyable_function; |
| #endif |
| #if __cpp_lib_function_ref |
| using std::function_ref; |
| #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; |
| } |
| } |
| |
| // <future> |
| 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 |
| |
| // <hazard_pointer> FIXME |
| |
| // 17.10.2 <initializer_list> |
| export namespace std |
| { |
| using std::begin; |
| using std::end; |
| using std::initializer_list; |
| } |
| |
| // <inplace_vector> FIXME |
| |
| // <iomanip> |
| 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; |
| } |
| |
| // <ios> |
| 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; |
| } |
| |
| // <iosfwd> |
| 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; |
| } |
| |
| // <iostream> |
| 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; |
| } |
| |
| // <istream> |
| 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>>; |
| } |
| |
| // <iterator> |
| 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-; |
| } |
| |
| // <latch> |
| export namespace std |
| { |
| using std::latch; |
| } |
| |
| // 17.3.3 <limits> [limits.syn] |
| export namespace std |
| { |
| using std::float_denorm_style; // deprecated in C++23 |
| using std::float_round_style; |
| using std::numeric_limits; |
| } |
| |
| // FIXME <linalg> |
| |
| // <list> |
| 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; |
| } |
| } |
| |
| // <locale> |
| 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; |
| } |
| |
| // <map> |
| export namespace std |
| { |
| using std::map; |
| using std::operator==; |
| using std::operator<=>; |
| using std::erase_if; |
| using std::multimap; |
| using std::swap; |
| namespace pmr |
| { |
| using std::pmr::map; |
| using std::pmr::multimap; |
| } |
| } |
| |
| // <mdspan> |
| #if __glibcxx_mdspan |
| export namespace std |
| { |
| using std::extents; |
| // FIXME layout_*, default_accessor and mdspan |
| } |
| #endif |
| |
| // 20.2 <memory> |
| export namespace std |
| { |
| using std::align; |
| using std::allocator; |
| using std::allocator_arg; |
| using std::allocator_arg_t; |
| using std::allocator_traits; |
| using std::assume_aligned; |
| using std::make_obj_using_allocator; |
| using std::pointer_traits; |
| using std::to_address; |
| using std::uninitialized_construct_using_allocator; |
| using std::uses_allocator; |
| using std::uses_allocator_construction_args; |
| using std::uses_allocator_v; |
| using std::operator==; |
| using std::addressof; |
| using std::uninitialized_default_construct; |
| using std::uninitialized_default_construct_n; |
| namespace ranges |
| { |
| using std::ranges::uninitialized_default_construct; |
| using std::ranges::uninitialized_default_construct_n; |
| } |
| using std::uninitialized_value_construct; |
| using std::uninitialized_value_construct_n; |
| namespace ranges |
| { |
| using std::ranges::uninitialized_value_construct; |
| using std::ranges::uninitialized_value_construct_n; |
| } |
| using std::uninitialized_copy; |
| using std::uninitialized_copy_n; |
| namespace ranges |
| { |
| using std::ranges::uninitialized_copy; |
| using std::ranges::uninitialized_copy_n; |
| using std::ranges::uninitialized_copy_n_result; |
| using std::ranges::uninitialized_copy_result; |
| } |
| using std::uninitialized_move; |
| using std::uninitialized_move_n; |
| namespace ranges |
| { |
| using std::ranges::uninitialized_move; |
| using std::ranges::uninitialized_move_n; |
| using std::ranges::uninitialized_move_n_result; |
| using std::ranges::uninitialized_move_result; |
| } |
| using std::uninitialized_fill; |
| using std::uninitialized_fill_n; |
| namespace ranges |
| { |
| using std::ranges::uninitialized_fill; |
| using std::ranges::uninitialized_fill_n; |
| } |
| using std::construct_at; |
| namespace ranges |
| { |
| using std::ranges::construct_at; |
| } |
| using std::destroy; |
| using std::destroy_at; |
| using std::destroy_n; |
| namespace ranges |
| { |
| using std::ranges::destroy; |
| using std::ranges::destroy_at; |
| using std::ranges::destroy_n; |
| } |
| using std::default_delete; |
| using std::make_unique; |
| using std::make_unique_for_overwrite; |
| using std::unique_ptr; |
| using std::operator<; |
| using std::operator>; |
| using std::operator<=; |
| using std::operator>=; |
| using std::operator<=>; |
| using std::operator<<; |
| using std::allocate_shared; |
| using std::allocate_shared_for_overwrite; |
| using std::bad_weak_ptr; |
| using std::const_pointer_cast; |
| using std::dynamic_pointer_cast; |
| using std::make_shared; |
| using std::make_shared_for_overwrite; |
| using std::reinterpret_pointer_cast; |
| using std::shared_ptr; |
| using std::static_pointer_cast; |
| using std::swap; |
| using std::get_deleter; |
| 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_is_lock_free; |
| using std::atomic_load; |
| using std::atomic_load_explicit; |
| using std::atomic_store; |
| using std::atomic_store_explicit; |
| using std::enable_shared_from_this; |
| using std::hash; |
| using std::owner_less; |
| using std::weak_ptr; |
| #if __cpp_lib_out_ptr |
| using std::out_ptr; |
| using std::inout_ptr; |
| #endif |
| #if __cpp_lib_indirect |
| using std::indirect; |
| namespace pmr { using std::pmr::indirect; } |
| #endif |
| #if __cpp_lib_polymorphic |
| using std::polymorphic; |
| namespace pmr { using std::pmr::polymorphic; } |
| #endif |
| } |
| |
| // 20.4 <memory_resource> |
| export namespace std::pmr |
| { |
| using std::pmr::memory_resource; |
| using std::pmr::operator==; |
| using std::pmr::get_default_resource; |
| using std::pmr::monotonic_buffer_resource; |
| using std::pmr::new_delete_resource; |
| using std::pmr::null_memory_resource; |
| using std::pmr::polymorphic_allocator; |
| using std::pmr::pool_options; |
| using std::pmr::set_default_resource; |
| using std::pmr::synchronized_pool_resource; |
| using std::pmr::unsynchronized_pool_resource; |
| } |
| |
| // <mutex> |
| export namespace std |
| { |
| using std::adopt_lock; |
| using std::adopt_lock_t; |
| using std::call_once; |
| using std::defer_lock; |
| using std::defer_lock_t; |
| using std::lock; |
| using std::lock_guard; |
| using std::mutex; |
| using std::once_flag; |
| using std::recursive_mutex; |
| using std::recursive_timed_mutex; |
| using std::scoped_lock; |
| using std::swap; |
| using std::timed_mutex; |
| using std::try_lock; |
| using std::try_to_lock; |
| using std::try_to_lock_t; |
| using std::unique_lock; |
| } |
| |
| // 17.6.2 <new> [new.syn] |
| export namespace std |
| { |
| using std::align_val_t; |
| using std::bad_alloc; |
| using std::bad_array_new_length; |
| using std::destroying_delete; |
| using std::destroying_delete_t; |
| using std::get_new_handler; |
| using std::hardware_destructive_interference_size; |
| using std::hardware_constructive_interference_size; |
| using std::launder; |
| using std::new_handler; |
| using std::nothrow; |
| using std::nothrow_t; |
| using std::set_new_handler; |
| } |
| export |
| { |
| using ::operator new; |
| using ::operator delete; |
| using ::operator new[]; |
| using ::operator delete[]; |
| } |
| |
| // <numbers> |
| export namespace std::numbers |
| { |
| using std::numbers::e; |
| using std::numbers::e_v; |
| using std::numbers::egamma; |
| using std::numbers::egamma_v; |
| using std::numbers::inv_pi; |
| using std::numbers::inv_pi_v; |
| using std::numbers::inv_sqrt3; |
| using std::numbers::inv_sqrt3_v; |
| using std::numbers::inv_sqrtpi; |
| using std::numbers::inv_sqrtpi_v; |
| using std::numbers::ln10; |
| using std::numbers::ln10_v; |
| using std::numbers::ln2; |
| using std::numbers::ln2_v; |
| using std::numbers::log10e; |
| using std::numbers::log10e_v; |
| using std::numbers::log2e; |
| using std::numbers::log2e_v; |
| using std::numbers::phi; |
| using std::numbers::phi_v; |
| using std::numbers::pi; |
| using std::numbers::pi_v; |
| using std::numbers::sqrt2; |
| using std::numbers::sqrt2_v; |
| using std::numbers::sqrt3; |
| using std::numbers::sqrt3_v; |
| } |
| |
| // <numeric> |
| export namespace std |
| { |
| using std::accumulate; |
| using std::adjacent_difference; |
| using std::exclusive_scan; |
| using std::inclusive_scan; |
| using std::inner_product; |
| using std::iota; |
| using std::partial_sum; |
| using std::reduce; |
| using std::transform_exclusive_scan; |
| using std::transform_inclusive_scan; |
| using std::transform_reduce; |
| using std::gcd; |
| using std::lcm; |
| using std::midpoint; |
| #if __cpp_lib_ranges_iota |
| namespace ranges { using ranges::iota; } |
| #endif |
| #if __cpp_lib_saturation_arithmetic |
| using std::add_sat; |
| using std::sub_sat; |
| using std::mul_sat; |
| using std::div_sat; |
| using std::saturate_cast; |
| #endif |
| } |
| |
| // <optional> |
| export namespace std |
| { |
| using std::bad_optional_access; |
| using std::nullopt; |
| using std::nullopt_t; |
| using std::optional; |
| using std::operator==; |
| using std::operator!=; |
| using std::operator<; |
| using std::operator>; |
| using std::operator<=; |
| using std::operator>=; |
| using std::operator<=>; |
| using std::hash; |
| using std::make_optional; |
| using std::swap; |
| } |
| |
| // <ostream> |
| export namespace std |
| { |
| using std::basic_ostream; |
| using std::endl; |
| using std::ends; |
| using std::flush; |
| using std::ostream; |
| using std::wostream; |
| using std::operator<<; |
| using std::emit_on_flush; |
| using std::noemit_on_flush; |
| using std::flush_emit; |
| } |
| |
| // <print> |
| #if __cpp_lib_print |
| export namespace std |
| { |
| using std::print; |
| using std::println; |
| using std::vprint_unicode; |
| //FIXME using std::vprint_unicode_buffered; |
| using std::vprint_nonunicode; |
| //FIXME using std::vprint_nonunicode_buffered; |
| } |
| #endif |
| |
| // <queue> |
| export namespace std |
| { |
| using std::queue; |
| using std::operator==; |
| using std::operator!=; |
| using std::operator<; |
| using std::operator>; |
| using std::operator<=; |
| using std::operator>=; |
| using std::operator<=>; |
| using std::priority_queue; |
| using std::swap; |
| using std::uses_allocator; |
| } |
| |
| // <random> |
| export namespace std |
| { |
| using std::bernoulli_distribution; |
| using std::binomial_distribution; |
| using std::cauchy_distribution; |
| using std::chi_squared_distribution; |
| using std::default_random_engine; |
| using std::discard_block_engine; |
| using std::discrete_distribution; |
| using std::exponential_distribution; |
| using std::extreme_value_distribution; |
| using std::fisher_f_distribution; |
| using std::gamma_distribution; |
| using std::generate_canonical; |
| using std::geometric_distribution; |
| using std::independent_bits_engine; |
| using std::knuth_b; |
| using std::linear_congruential_engine; |
| using std::lognormal_distribution; |
| using std::mersenne_twister_engine; |
| using std::minstd_rand; |
| using std::minstd_rand0; |
| using std::mt19937; |
| using std::mt19937_64; |
| using std::negative_binomial_distribution; |
| using std::normal_distribution; |
| using std::piecewise_constant_distribution; |
| using std::piecewise_linear_distribution; |
| using std::poisson_distribution; |
| using std::random_device; |
| using std::ranlux24; |
| using std::ranlux24_base; |
| using std::ranlux48; |
| using std::ranlux48_base; |
| using std::seed_seq; |
| using std::shuffle_order_engine; |
| using std::student_t_distribution; |
| using std::subtract_with_carry_engine; |
| using std::uniform_int_distribution; |
| using std::uniform_random_bit_generator; |
| using std::uniform_real_distribution; |
| using std::weibull_distribution; |
| } |
| |
| // <ranges> |
| export namespace std |
| { |
| namespace ranges |
| { |
| using std::ranges::begin; |
| using std::ranges::cbegin; |
| using std::ranges::cdata; |
| using std::ranges::cend; |
| using std::ranges::crbegin; |
| using std::ranges::crend; |
| using std::ranges::data; |
| using std::ranges::empty; |
| using std::ranges::end; |
| using std::ranges::rbegin; |
| using std::ranges::rend; |
| using std::ranges::size; |
| using std::ranges::ssize; |
| using std::ranges::bidirectional_range; |
| using std::ranges::borrowed_range; |
| using std::ranges::common_range; |
| using std::ranges::contiguous_range; |
| using std::ranges::disable_sized_range; |
| using std::ranges::enable_borrowed_range; |
| using std::ranges::enable_view; |
| using std::ranges::forward_range; |
| using std::ranges::get; |
| using std::ranges::input_range; |
| using std::ranges::iterator_t; |
| using std::ranges::output_range; |
| using std::ranges::random_access_range; |
| using std::ranges::range; |
| using std::ranges::range_common_reference_t; |
| using std::ranges::range_difference_t; |
| using std::ranges::range_reference_t; |
| using std::ranges::range_rvalue_reference_t; |
| using std::ranges::range_size_t; |
| using std::ranges::range_value_t; |
| using std::ranges::sentinel_t; |
| using std::ranges::sized_range; |
| using std::ranges::subrange; |
| using std::ranges::subrange_kind; |
| using std::ranges::view; |
| using std::ranges::view_base; |
| using std::ranges::view_interface; |
| using std::ranges::viewable_range; |
| } |
| using std::ranges::get; |
| namespace ranges |
| { |
| using std::ranges::borrowed_iterator_t; |
| using std::ranges::borrowed_subrange_t; |
| using std::ranges::dangling; |
| using std::ranges::empty_view; |
| namespace views |
| { |
| using std::ranges::views::empty; |
| } |
| using std::ranges::single_view; |
| namespace views |
| { |
| using std::ranges::views::single; |
| } |
| using std::ranges::iota_view; |
| namespace views |
| { |
| using std::ranges::views::iota; |
| } |
| using std::ranges::basic_istream_view; |
| using std::ranges::istream_view; |
| using std::ranges::wistream_view; |
| namespace views |
| { |
| using std::ranges::views::istream; |
| } |
| namespace views |
| { |
| using std::ranges::views::all; |
| using std::ranges::views::all_t; |
| } |
| using std::ranges::filter_view; |
| using std::ranges::owning_view; |
| using std::ranges::ref_view; |
| namespace views |
| { |
| using std::ranges::views::filter; |
| } |
| using std::ranges::transform_view; |
| namespace views |
| { |
| using std::ranges::views::transform; |
| } |
| using std::ranges::take_view; |
| namespace views |
| { |
| using std::ranges::views::take; |
| } |
| using std::ranges::take_while_view; |
| namespace views |
| { |
| using std::ranges::views::take_while; |
| } |
| using std::ranges::drop_view; |
| namespace views |
| { |
| using std::ranges::views::drop; |
| } |
| using std::ranges::drop_while_view; |
| namespace views |
| { |
| using std::ranges::views::drop_while; |
| } |
| using std::ranges::join_view; |
| namespace views |
| { |
| using std::ranges::views::join; |
| } |
| using std::ranges::lazy_split_view; |
| using std::ranges::split_view; |
| namespace views |
| { |
| using std::ranges::views::lazy_split; |
| using std::ranges::views::split; |
| } |
| namespace views |
| { |
| using std::ranges::views::counted; |
| } |
| using std::ranges::common_view; |
| namespace views |
| { |
| using std::ranges::views::common; |
| } |
| using std::ranges::reverse_view; |
| namespace views |
| { |
| using std::ranges::views::reverse; |
| } |
| using std::ranges::elements_view; |
| using std::ranges::keys_view; |
| using std::ranges::values_view; |
| namespace views |
| { |
| using std::ranges::views::elements; |
| using std::ranges::views::keys; |
| using std::ranges::views::values; |
| } |
| #if __cpp_lib_ranges >= 202202L |
| using ranges::range_adaptor_closure; |
| #endif |
| } |
| namespace views = ranges::views; |
| using std::tuple_element; |
| using std::tuple_size; |
| namespace ranges |
| { |
| #if __glibcxx_ranges_as_const // >= C++23 |
| using ranges::constant_range; |
| using ranges::const_iterator_t; |
| using ranges::const_sentinel_t; |
| using ranges::range_const_reference_t; |
| using ranges::as_const_view; |
| namespace views { using views::as_const; } |
| #endif |
| #ifdef __glibcxx_generator // C++ >= 23 && __glibcxx_coroutine |
| using ranges::elements_of; |
| #endif |
| #ifdef __cpp_lib_ranges_as_rvalue // C++ >= 23 |
| using ranges::as_rvalue_view; |
| namespace views { using views::as_rvalue; } |
| #endif |
| #ifdef __cpp_lib_ranges_chunk // C++ >= 23 |
| using ranges::chunk_view; |
| namespace views { using views::chunk; } |
| #endif |
| #ifdef __cpp_lib_ranges_slide // C++ >= 23 |
| using ranges::slide_view; |
| namespace views { using views::slide; } |
| #endif |
| #ifdef __cpp_lib_ranges_zip // C++ >= 23 |
| using ranges::zip_view; |
| using ranges::zip_transform_view; |
| using ranges::adjacent_view; |
| using ranges::adjacent_transform_view; |
| namespace views { |
| using views::zip; |
| using views::zip_transform; |
| using views::adjacent; |
| using views::adjacent_transform; |
| using views::pairwise; |
| using views::pairwise_transform; |
| } |
| #endif |
| #ifdef __cpp_lib_ranges_chunk_by // C++ >= 23 |
| using ranges::chunk_by_view; |
| namespace views { using views::chunk_by; } |
| #endif |
| #ifdef __cpp_lib_ranges_join_with // C++ >= 23 |
| using ranges::join_with_view; |
| namespace views { using views::join_with; } |
| #endif |
| #ifdef __cpp_lib_ranges_repeat // C++ >= 23 |
| using ranges::repeat_view; |
| namespace views { using views::repeat; } |
| #endif |
| #ifdef __cpp_lib_ranges_stride // C++ >= 23 |
| using ranges::stride_view; |
| namespace views { using views::stride; } |
| #endif |
| #ifdef __cpp_lib_ranges_cartesian_product // C++ >= 23 |
| using ranges::cartesian_product_view; |
| namespace views { using views::cartesian_product; } |
| #endif |
| #ifdef __cpp_lib_ranges_enumerate // C++ >= 23 |
| using ranges::enumerate_view; |
| namespace views { using views::enumerate; } |
| #endif |
| #if __cpp_lib_ranges_concat // C++ >= C++26 |
| using ranges::concat_view; |
| namespace views { using views::concat; } |
| #endif |
| #if __cpp_lib_ranges_cache_latest // C++ >= C++26 |
| using ranges::cache_latest_view; |
| namespace views { using views::cache_latest; } |
| #endif |
| #if __glibcxx_ranges_to_input // C++ >= 26 |
| using ranges::to_input_view; |
| namespace views { using views::to_input; } |
| #endif |
| } |
| #if __glibcxx_ranges_to_container // C++ >= 23 |
| namespace ranges { using ranges::to; } |
| using std::from_range_t; |
| using std::from_range; |
| #endif |
| } |
| |
| // <ratio> |
| export namespace std |
| { |
| using std::atto; |
| using std::centi; |
| using std::deca; |
| using std::deci; |
| using std::exa; |
| using std::femto; |
| using std::giga; |
| using std::hecto; |
| using std::kilo; |
| using std::mega; |
| using std::micro; |
| using std::milli; |
| using std::nano; |
| using std::peta; |
| using std::pico; |
| using std::ratio; |
| using std::ratio_add; |
| using std::ratio_divide; |
| using std::ratio_equal; |
| using std::ratio_equal_v; |
| using std::ratio_greater; |
| using std::ratio_greater_equal; |
| using std::ratio_greater_equal_v; |
| using std::ratio_greater_v; |
| using std::ratio_less; |
| using std::ratio_less_equal; |
| using std::ratio_less_equal_v; |
| using std::ratio_less_v; |
| using std::ratio_multiply; |
| using std::ratio_not_equal; |
| using std::ratio_not_equal_v; |
| using std::ratio_subtract; |
| using std::tera; |
| } |
| |
| // FIXME <rcu> |
| |
| // <regex> |
| export namespace std |
| { |
| namespace regex_constants |
| { |
| using std::regex_constants::error_type; |
| using std::regex_constants::match_flag_type; |
| using std::regex_constants::syntax_option_type; |
| using std::regex_constants::operator&; |
| using std::regex_constants::operator&=; |
| using std::regex_constants::operator^; |
| using std::regex_constants::operator^=; |
| using std::regex_constants::operator|; |
| using std::regex_constants::operator|=; |
| using std::regex_constants::operator~; |
| } |
| using std::basic_regex; |
| using std::csub_match; |
| using std::regex; |
| using std::regex_error; |
| using std::regex_traits; |
| using std::ssub_match; |
| using std::sub_match; |
| using std::swap; |
| using std::wcsub_match; |
| using std::wregex; |
| using std::wssub_match; |
| using std::operator==; |
| using std::operator<=>; |
| using std::operator<<; |
| using std::cmatch; |
| using std::cregex_iterator; |
| using std::cregex_token_iterator; |
| using std::match_results; |
| using std::regex_iterator; |
| using std::regex_match; |
| using std::regex_replace; |
| using std::regex_search; |
| using std::regex_token_iterator; |
| using std::smatch; |
| using std::sregex_iterator; |
| using std::sregex_token_iterator; |
| using std::wcmatch; |
| using std::wcregex_iterator; |
| using std::wcregex_token_iterator; |
| using std::wsmatch; |
| using std::wsregex_iterator; |
| using std::wsregex_token_iterator; |
| namespace pmr |
| { |
| using std::pmr::cmatch; |
| using std::pmr::match_results; |
| using std::pmr::smatch; |
| using std::pmr::wcmatch; |
| using std::pmr::wsmatch; |
| } |
| } |
| |
| // 20.5 <scoped_allocator> |
| export namespace std |
| { |
| using std::scoped_allocator_adaptor; |
| using std::operator==; |
| } |
| |
| // <semaphore> |
| export namespace std |
| { |
| using std::binary_semaphore; |
| using std::counting_semaphore; |
| } |
| |
| // <set> |
| export namespace std |
| { |
| using std::set; |
| using std::operator==; |
| using std::operator<=>; |
| using std::erase_if; |
| using std::multiset; |
| using std::swap; |
| namespace pmr |
| { |
| using std::pmr::multiset; |
| using std::pmr::set; |
| } |
| } |
| |
| // <shared_mutex> |
| export namespace std |
| { |
| using std::shared_lock; |
| using std::shared_mutex; |
| using std::shared_timed_mutex; |
| using std::swap; |
| } |
| |
| // 17.8.1 <source_location> |
| export namespace std |
| { |
| using std::source_location; |
| } |
| |
| // <span> |
| export namespace std |
| { |
| using std::dynamic_extent; |
| using std::span; |
| namespace ranges |
| { |
| using std::ranges::enable_borrowed_range; |
| using std::ranges::enable_view; |
| } |
| using std::as_bytes; |
| using std::as_writable_bytes; |
| } |
| |
| #if __cpp_lib_spanstream |
| // <spanstream> |
| export namespace std |
| { |
| using std::basic_spanbuf; |
| using std::spanbuf; |
| using std::wspanbuf; |
| using std::basic_ispanstream; |
| using std::ispanstream; |
| using std::wispanstream; |
| using std::basic_ospanstream; |
| using std::ospanstream; |
| using std::wospanstream; |
| using std::basic_spanstream; |
| using std::spanstream; |
| using std::wspanstream; |
| } |
| #endif |
| |
| // <sstream> |
| export namespace std |
| { |
| using std::basic_istringstream; |
| using std::basic_ostringstream; |
| using std::basic_stringbuf; |
| using std::basic_stringstream; |
| using std::istringstream; |
| using std::ostringstream; |
| using std::stringbuf; |
| using std::stringstream; |
| using std::swap; |
| using std::wistringstream; |
| using std::wostringstream; |
| using std::wstringbuf; |
| using std::wstringstream; |
| } |
| |
| // <stack> |
| export namespace std |
| { |
| using std::stack; |
| using std::operator==; |
| using std::operator!=; |
| using std::operator<; |
| using std::operator>; |
| using std::operator<=; |
| using std::operator>=; |
| using std::operator<=>; |
| using std::swap; |
| using std::uses_allocator; |
| } |
| |
| // 19.6 <stacktrace> |
| #if __cpp_lib_stacktrace |
| export namespace std |
| { |
| using std::stacktrace_entry; |
| using std::basic_stacktrace; |
| using std::stacktrace; |
| using std::swap; |
| using std::to_string; |
| using std::operator<<; |
| using std::formatter; |
| namespace pmr |
| { |
| using std::pmr::stacktrace; |
| } |
| using std::hash; |
| } |
| #endif |
| |
| // 19.2 <stdexcept> |
| export namespace std |
| { |
| using std::domain_error; |
| using std::invalid_argument; |
| using std::length_error; |
| using std::logic_error; |
| using std::out_of_range; |
| using std::overflow_error; |
| using std::range_error; |
| using std::runtime_error; |
| using std::underflow_error; |
| } |
| |
| // 17.4.2 <stdfloat> |
| export namespace std |
| { |
| #ifdef __STDCPP_FLOAT16_T__ |
| using std::float16_t; |
| #endif |
| #ifdef __STDCPP_FLOAT32_T__ |
| using std::float32_t; |
| #endif |
| #ifdef __STDCPP_FLOAT64_T__ |
| using std::float64_t; |
| #endif |
| #ifdef __STDCPP_FLOAT128_T__ |
| using std::float128_t; |
| #endif |
| #ifdef __STDCPP_BFLOAT16_T__ |
| using std::bfloat16_t; |
| #endif |
| } |
| |
| // <stop_token> |
| #if __cpp_lib_jthread |
| export namespace std |
| { |
| using std::stop_token; |
| using std::stop_source; |
| using std::nostopstate_t; |
| using std::nostopstate; |
| using std::stop_callback; |
| #if __cpp_lib_senders |
| using std::never_stop_token; |
| using std::inplace_stop_token; |
| using std::inplace_stop_source; |
| using std::inplace_stop_callback; |
| using std::stop_callback_for; |
| #endif |
| } |
| #endif |
| |
| // <streambuf> |
| export namespace std |
| { |
| using std::basic_streambuf; |
| using std::streambuf; |
| using std::wstreambuf; |
| } |
| |
| // <string> |
| export namespace std |
| { |
| using std::basic_string; |
| using std::char_traits; |
| using std::operator+; |
| using std::operator==; |
| using std::operator<=>; |
| using std::swap; |
| using std::operator>>; |
| using std::operator<<; |
| using std::erase; |
| using std::erase_if; |
| using std::getline; |
| using std::stod; |
| using std::stof; |
| using std::stoi; |
| using std::stol; |
| using std::stold; |
| using std::stoll; |
| using std::stoul; |
| using std::stoull; |
| using std::string; |
| using std::to_string; |
| using std::to_wstring; |
| using std::u16string; |
| using std::u32string; |
| using std::u8string; |
| using std::wstring; |
| namespace pmr |
| { |
| using std::pmr::basic_string; |
| using std::pmr::string; |
| using std::pmr::u16string; |
| using std::pmr::u32string; |
| using std::pmr::u8string; |
| using std::pmr::wstring; |
| } |
| using std::hash; |
| } |
| export namespace std::inline literals::inline string_literals |
| { |
| using std::operator""s; |
| } |
| |
| // <string_view> |
| export namespace std |
| { |
| using std::basic_string_view; |
| namespace ranges |
| { |
| using std::ranges::enable_borrowed_range; |
| using std::ranges::enable_view; |
| } |
| using std::operator==; |
| using std::operator<=>; |
| using std::operator<<; |
| using std::hash; |
| using std::string_view; |
| using std::u16string_view; |
| using std::u32string_view; |
| using std::u8string_view; |
| using std::wstring_view; |
| } |
| export namespace std::inline literals::inline string_view_literals |
| { |
| using string_view_literals::operator""sv; |
| } |
| |
| // <strstream>: deprecated C++98, removed C++26 |
| export namespace std |
| { |
| using std::istrstream; |
| using std::ostrstream; |
| using std::strstream; |
| using std::strstreambuf; |
| } |
| |
| // <syncstream> |
| export namespace std |
| { |
| using std::basic_syncbuf; |
| using std::swap; |
| using std::basic_osyncstream; |
| using std::osyncstream; |
| using std::syncbuf; |
| using std::wosyncstream; |
| using std::wsyncbuf; |
| } |
| |
| // 19.5 <system_error> |
| export namespace std |
| { |
| using std::errc; |
| using std::error_category; |
| using std::error_code; |
| using std::error_condition; |
| using std::generic_category; |
| using std::is_error_code_enum; |
| using std::is_error_condition_enum; |
| using std::make_error_code; |
| using std::system_category; |
| using std::system_error; |
| using std::operator<<; |
| using std::make_error_condition; |
| using std::operator==; |
| using std::operator<=>; |
| using std::hash; |
| using std::is_error_code_enum_v; |
| using std::is_error_condition_enum_v; |
| } |
| |
| // <text_encoding> |
| #if __cpp_lib_text_encoding |
| export namespace std |
| { |
| using std::text_encoding; |
| } |
| #endif |
| |
| // <thread> |
| export namespace std |
| { |
| using std::swap; |
| using std::thread; |
| using std::jthread; |
| namespace this_thread |
| { |
| using std::this_thread::get_id; |
| using std::this_thread::sleep_for; |
| using std::this_thread::sleep_until; |
| using std::this_thread::yield; |
| } |
| using std::operator==; |
| using std::operator<=>; |
| using std::operator<<; |
| using std::hash; |
| } |
| |
| // <tuple> |
| export namespace std |
| { |
| using std::apply; |
| using std::forward_as_tuple; |
| using std::get; |
| using std::ignore; |
| using std::make_from_tuple; |
| using std::make_tuple; |
| using std::tie; |
| using std::tuple; |
| using std::tuple_cat; |
| using std::tuple_element; |
| using std::tuple_element_t; |
| using std::tuple_size; |
| using std::operator==; |
| using std::operator<=>; |
| using std::swap; |
| using std::tuple_size_v; |
| using std::uses_allocator; |
| } |
| |
| // <type_traits> |
| export namespace std |
| { |
| using std::add_const; |
| using std::add_const_t; |
| using std::add_cv; |
| using std::add_cv_t; |
| using std::add_lvalue_reference; |
| using std::add_lvalue_reference_t; |
| using std::add_pointer; |
| using std::add_pointer_t; |
| using std::add_rvalue_reference; |
| using std::add_rvalue_reference_t; |
| using std::add_volatile; |
| using std::add_volatile_t; |
| using std::aligned_storage; |
| using std::aligned_storage_t; |
| using std::aligned_union; |
| using std::aligned_union_t; |
| using std::alignment_of; |
| using std::alignment_of_v; |
| using std::basic_common_reference; |
| using std::bool_constant; |
| using std::common_reference; |
| using std::common_reference_t; |
| using std::common_type; |
| using std::common_type_t; |
| using std::conditional; |
| using std::conditional_t; |
| using std::conjunction; |
| using std::conjunction_v; |
| using std::decay; |
| using std::decay_t; |
| using std::disjunction; |
| using std::disjunction_v; |
| using std::enable_if; |
| using std::enable_if_t; |
| using std::extent; |
| using std::extent_v; |
| using std::false_type; |
| using std::has_unique_object_representations; |
| using std::has_unique_object_representations_v; |
| using std::has_virtual_destructor; |
| using std::has_virtual_destructor_v; |
| using std::integral_constant; |
| using std::invoke_result; |
| using std::invoke_result_t; |
| using std::is_abstract; |
| using std::is_abstract_v; |
| using std::is_aggregate; |
| using std::is_aggregate_v; |
| using std::is_arithmetic; |
| using std::is_arithmetic_v; |
| using std::is_array; |
| using std::is_array_v; |
| using std::is_assignable; |
| using std::is_assignable_v; |
| using std::is_base_of; |
| using std::is_base_of_v; |
| using std::is_bounded_array; |
| using std::is_bounded_array_v; |
| using std::is_class; |
| using std::is_class_v; |
| using std::is_compound; |
| using std::is_compound_v; |
| using std::is_const; |
| using std::is_const_v; |
| using std::is_constant_evaluated; |
| using std::is_constructible; |
| using std::is_constructible_v; |
| using std::is_convertible; |
| using std::is_convertible_v; |
| using std::is_copy_assignable; |
| using std::is_copy_assignable_v; |
| using std::is_copy_constructible; |
| using std::is_copy_constructible_v; |
| using std::is_default_constructible; |
| using std::is_default_constructible_v; |
| using std::is_destructible; |
| using std::is_destructible_v; |
| using std::is_empty; |
| using std::is_empty_v; |
| using std::is_enum; |
| using std::is_enum_v; |
| using std::is_final; |
| using std::is_final_v; |
| using std::is_floating_point; |
| using std::is_floating_point_v; |
| using std::is_function; |
| using std::is_function_v; |
| using std::is_fundamental; |
| using std::is_fundamental_v; |
| using std::is_integral; |
| using std::is_integral_v; |
| using std::is_invocable; |
| using std::is_invocable_r; |
| using std::is_invocable_r_v; |
| using std::is_invocable_v; |
| using std::is_lvalue_reference; |
| using std::is_lvalue_reference_v; |
| using std::is_member_function_pointer; |
| using std::is_member_function_pointer_v; |
| using std::is_member_object_pointer; |
| using std::is_member_object_pointer_v; |
| using std::is_member_pointer; |
| using std::is_member_pointer_v; |
| using std::is_move_assignable; |
| using std::is_move_assignable_v; |
| using std::is_move_constructible; |
| using std::is_move_constructible_v; |
| using std::is_nothrow_assignable; |
| using std::is_nothrow_assignable_v; |
| using std::is_nothrow_constructible; |
| using std::is_nothrow_constructible_v; |
| using std::is_nothrow_convertible; |
| using std::is_nothrow_convertible_v; |
| using std::is_nothrow_copy_assignable; |
| using std::is_nothrow_copy_assignable_v; |
| using std::is_nothrow_copy_constructible; |
| using std::is_nothrow_copy_constructible_v; |
| using std::is_nothrow_default_constructible; |
| using std::is_nothrow_default_constructible_v; |
| using std::is_nothrow_destructible; |
| using std::is_nothrow_destructible_v; |
| using std::is_nothrow_invocable; |
| using std::is_nothrow_invocable_r; |
| using std::is_nothrow_invocable_r_v; |
| using std::is_nothrow_invocable_v; |
| using std::is_nothrow_move_assignable; |
| using std::is_nothrow_move_assignable_v; |
| using std::is_nothrow_move_constructible; |
| using std::is_nothrow_move_constructible_v; |
| using std::is_nothrow_swappable; |
| using std::is_nothrow_swappable_v; |
| using std::is_nothrow_swappable_with; |
| using std::is_nothrow_swappable_with_v; |
| using std::is_null_pointer; |
| using std::is_null_pointer_v; |
| using std::is_object; |
| using std::is_object_v; |
| using std::is_pod; |
| using std::is_pod_v; |
| using std::is_pointer; |
| using std::is_pointer_v; |
| using std::is_polymorphic; |
| using std::is_polymorphic_v; |
| using std::is_reference; |
| using std::is_reference_v; |
| using std::is_rvalue_reference; |
| using std::is_rvalue_reference_v; |
| using std::is_same; |
| using std::is_same_v; |
| using std::is_scalar; |
| using std::is_scalar_v; |
| using std::is_signed; |
| using std::is_signed_v; |
| using std::is_standard_layout; |
| using std::is_standard_layout_v; |
| using std::is_swappable; |
| using std::is_swappable_v; |
| using std::is_swappable_with; |
| using std::is_swappable_with_v; |
| using std::is_trivial; |
| using std::is_trivial_v; |
| using std::is_trivially_assignable; |
| using std::is_trivially_assignable_v; |
| using std::is_trivially_constructible; |
| using std::is_trivially_constructible_v; |
| using std::is_trivially_copy_assignable; |
| using std::is_trivially_copy_assignable_v; |
| using std::is_trivially_copy_constructible; |
| using std::is_trivially_copy_constructible_v; |
| using std::is_trivially_copyable; |
| using std::is_trivially_copyable_v; |
| using std::is_trivially_default_constructible; |
| using std::is_trivially_default_constructible_v; |
| using std::is_trivially_destructible; |
| using std::is_trivially_destructible_v; |
| using std::is_trivially_move_assignable; |
| using std::is_trivially_move_assignable_v; |
| using std::is_trivially_move_constructible; |
| using std::is_trivially_move_constructible_v; |
| using std::is_unbounded_array; |
| using std::is_unbounded_array_v; |
| using std::is_union; |
| using std::is_union_v; |
| using std::is_unsigned; |
| using std::is_unsigned_v; |
| #if __cpp_lib_is_virtual_base_of |
| using std::is_virtual_base_of; |
| using std::is_virtual_base_of_v; |
| #endif |
| using std::is_void; |
| using std::is_void_v; |
| using std::is_volatile; |
| using std::is_volatile_v; |
| using std::make_signed; |
| using std::make_signed_t; |
| using std::make_unsigned; |
| using std::make_unsigned_t; |
| using std::negation; |
| using std::negation_v; |
| using std::rank; |
| using std::rank_v; |
| using std::remove_all_extents; |
| using std::remove_all_extents_t; |
| using std::remove_const; |
| using std::remove_const_t; |
| using std::remove_cv; |
| using std::remove_cv_t; |
| using std::remove_cvref; |
| using std::remove_cvref_t; |
| using std::remove_extent; |
| using std::remove_extent_t; |
| using std::remove_pointer; |
| using std::remove_pointer_t; |
| using std::remove_reference; |
| using std::remove_reference_t; |
| using std::remove_volatile; |
| using std::remove_volatile_t; |
| using std::true_type; |
| using std::type_identity; |
| using std::type_identity_t; |
| using std::underlying_type; |
| using std::underlying_type_t; |
| using std::unwrap_ref_decay; |
| using std::unwrap_ref_decay_t; |
| using std::unwrap_reference; |
| using std::unwrap_reference_t; |
| using std::void_t; |
| #if __cpp_lib_reference_from_temporary |
| using std::reference_converts_from_temporary; |
| using std::reference_converts_from_temporary_v; |
| using std::reference_constructs_from_temporary; |
| using std::reference_constructs_from_temporary_v; |
| #endif |
| #if __cpp_lib_is_layout_compatible |
| using std::is_corresponding_member; |
| using std::is_layout_compatible; |
| using std::is_layout_compatible_v; |
| #endif |
| #if __cpp_lib_is_pointer_interconvertible |
| using std::is_pointer_interconvertible_base_of; |
| using std::is_pointer_interconvertible_base_of_v; |
| using std::is_pointer_interconvertible_with_class; |
| #endif |
| } |
| |
| // <typeindex> |
| export namespace std |
| { |
| using std::hash; |
| using std::type_index; |
| } |
| |
| // 17.7.2 <typeinfo> [typeinfo.syn] |
| export namespace std |
| { |
| using std::bad_cast; |
| using std::bad_typeid; |
| using std::type_info; |
| } |
| |
| // <unordered_map> |
| export namespace std |
| { |
| using std::unordered_map; |
| using std::unordered_multimap; |
| using std::operator==; |
| using std::erase_if; |
| using std::swap; |
| namespace pmr |
| { |
| using std::pmr::unordered_map; |
| using std::pmr::unordered_multimap; |
| } |
| } |
| |
| // <unordered_set> |
| export namespace std |
| { |
| using std::unordered_multiset; |
| using std::unordered_set; |
| using std::operator==; |
| using std::erase_if; |
| using std::swap; |
| namespace pmr |
| { |
| using std::pmr::unordered_multiset; |
| using std::pmr::unordered_set; |
| } |
| } |
| |
| // <utility> |
| export namespace std |
| { |
| using std::as_const; |
| using std::cmp_equal; |
| using std::cmp_greater; |
| using std::cmp_greater_equal; |
| using std::cmp_less; |
| using std::cmp_less_equal; |
| using std::cmp_not_equal; |
| using std::declval; |
| using std::exchange; |
| using std::forward; |
| #if __cpp_lib_forward_like |
| using std::forward_like; |
| #endif |
| using std::in_range; |
| using std::index_sequence; |
| using std::index_sequence_for; |
| using std::integer_sequence; |
| using std::make_index_sequence; |
| using std::make_integer_sequence; |
| using std::move; |
| using std::move_if_noexcept; |
| #if __cpp_lib_function_ref |
| using std::nontype_t; |
| using std::nontype; |
| #endif |
| using std::pair; |
| using std::swap; |
| using std::operator==; |
| using std::operator<=>; |
| using std::get; |
| using std::in_place; |
| using std::in_place_index; |
| using std::in_place_index_t; |
| using std::in_place_t; |
| using std::in_place_type; |
| using std::in_place_type_t; |
| using std::make_pair; |
| using std::piecewise_construct; |
| using std::piecewise_construct_t; |
| #if __cpp_lib_to_underlying |
| using std::to_underlying; |
| #endif |
| using std::tuple_element; |
| using std::tuple_size; |
| #pragma GCC diagnostic push |
| #pragma GCC diagnostic ignored "-Wdeprecated-declarations" |
| namespace rel_ops |
| { |
| using std::rel_ops::operator!=; |
| using std::rel_ops::operator>; |
| using std::rel_ops::operator<=; |
| using std::rel_ops::operator>=; |
| } |
| #pragma GCC diagnostic pop |
| #if __cpp_lib_unreachable |
| using std::unreachable; |
| #endif |
| } |
| |
| // <valarray> |
| export namespace std |
| { |
| using std::gslice; |
| using std::gslice_array; |
| using std::indirect_array; |
| using std::mask_array; |
| using std::slice; |
| using std::slice_array; |
| using std::swap; |
| using std::valarray; |
| 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::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::abs; |
| using std::acos; |
| using std::asin; |
| using std::atan; |
| using std::atan2; |
| using std::begin; |
| using std::cos; |
| using std::cosh; |
| using std::end; |
| using std::exp; |
| using std::log; |
| using std::log10; |
| using std::pow; |
| using std::sin; |
| using std::sinh; |
| using std::sqrt; |
| using std::tan; |
| using std::tanh; |
| } |
| |
| // <variant> |
| export namespace std |
| { |
| using std::get; |
| using std::get_if; |
| using std::holds_alternative; |
| using std::variant; |
| using std::variant_alternative; |
| using std::variant_alternative_t; |
| using std::variant_npos; |
| using std::variant_size; |
| using std::variant_size_v; |
| using std::operator==; |
| using std::operator!=; |
| using std::operator<; |
| using std::operator>; |
| using std::operator<=; |
| using std::operator>=; |
| using std::operator<=>; |
| using std::bad_variant_access; |
| using std::hash; |
| using std::monostate; |
| using std::swap; |
| using std::visit; |
| } |
| |
| // <vector> |
| export namespace std |
| { |
| using std::vector; |
| using std::operator==; |
| using std::operator<=>; |
| using std::erase; |
| using std::erase_if; |
| using std::swap; |
| namespace pmr |
| { |
| using std::pmr::vector; |
| } |
| using std::hash; |
| } |