libstdc++: Add various missing exports
Jonathan Wakely
jwakely.gcc@gmail.com
Mon Aug 4 13:11:32 GMT 2025
On Mon, 4 Aug 2025, 12:26 Jakub Jelinek, <jakub@redhat.com> wrote:
> On Mon, Aug 04, 2025 at 12:00:32PM +0200, Jonathan Wakely wrote:
> > using std::operator""d;
> > using std::operator""h;
> > using std::operator""min;
> > using std::operator""ms;
> > using std::operator""ns;
> > using std::operator""sv;
> > using std::operator""us;
> > using std::operator""y;
> >
> > Shouldn't these be in std::chrono? Or the inline namespace
> chrono_literals
>
> Yeah, guess the plugin should be modified to silently look through inline
> namespaces only when they have names starting with underscore (e.g.
> __cxx11)
> but not when they have non-uglified names (e.g. the
> std::literals::chrono_literals:: cases).
>
> > using std::ranges::iter_move;
> > using std::ranges::iter_swap;
> >
> > These should be exported - I'm surprised we're missing them.
> >
> > using std::regex_constants::awk;
> >
> > All these constants should be exported.
> >
> > I think all the other names have been removed from the standard and are
> not
> > in C++20.
>
> I went through it all now, using cppreference as a quick check for stuff
> removed in C++17/C++20 and for everything added verified it is in
> corresponding eel.is/c++-draft/*.syn etc. and looked it up in the
> libstdc++
> headers for guarding macros.
>
> After all the additions I've compiled std.cc with -std=c++20, -std=c++23
> and
> -std=c++26, the first one revealed std::ranges::shift_{left,right} emitted
> an
> error in that case, the patch fixes that too.
>
Somebody submitted patches for those and byteswap in the past 24 hours, but
your patch is more complete.
> Ok for trunk?
>
This all looks good to me from a quick check. If Patrick is happy with this
(he added the shift algorithms) then ok for trunk, thanks.
> 2025-08-04 Jakub Jelinek <jakub@redhat.com>
>
> PR libstdc++/121373
> * src/c++23/std.cc.in (std::ranges::shift_left,
> std::ranges::shift_right): Only export for C++23 and later.
> (std::ranges::fold_left_first_with_iter_result,
> std::ranges::fold_left_with_iter_result): Export.
> (std::byteswap): Export for C++23 and later.
> (std::ranges::iter_move, std::ranges::iter_swap): Export.
> (std::projected_value_t): Export for C++26 and later.
> (std::out_ptr_t, std::inout_ptr_t): Export.
> (std::ranges::iota_result): Export.
> (std::regex_constants): Export a lot of constants.
> (std::is_scoped_enum, std::is_scoped_enum_v): Export.
>
> --- libstdc++-v3/src/c++23/std.cc.in.jj 2025-08-02 20:50:48.301748803 +0200
> +++ libstdc++-v3/src/c++23/std.cc.in 2025-08-04 12:13:30.778385590
> +0200
> @@ -277,15 +277,14 @@ export namespace std
> using std::ranges::shuffle;
> }
> using std::shift_left;
> - namespace ranges
> - {
> - using std::ranges::shift_left;
> - }
> using std::shift_right;
> +#if __cpp_lib_shift >= 202202L // >= C++23
> namespace ranges
> {
> + using std::ranges::shift_left;
> using std::ranges::shift_right;
> }
> +#endif
> using std::sort;
> namespace ranges
> {
> @@ -500,7 +499,9 @@ export namespace std
> using ranges::fold_left;
> using ranges::fold_left_first;
> using ranges::fold_left_first_with_iter;
> + using ranges::fold_left_first_with_iter_result;
> using ranges::fold_left_with_iter;
> + using ranges::fold_left_with_iter_result;
> using ranges::fold_right;
> using ranges::fold_right_last;
> using ranges::in_value_result;
> @@ -672,6 +673,9 @@ export namespace std
> using std::popcount;
> using std::rotl;
> using std::rotr;
> +#if __cpp_lib_byteswap // >= C++23
> + using std::byteswap;
> +#endif
> }
>
> // 22.9 <bitset>
> @@ -1693,6 +1697,8 @@ export namespace std
> {
> using std::ranges::advance;
> using std::ranges::distance;
> + using std::ranges::iter_move;
> + using std::ranges::iter_swap;
> using std::ranges::next;
> using std::ranges::prev;
> }
> @@ -1747,6 +1753,9 @@ export namespace std
> using std::make_const_iterator;
> using std::make_const_sentinel;
> #endif
> +#if __glibcxx_algorithm_default_value_type // >= C++26
> + using std::projected_value_t;
> +#endif
> }
>
> // <latch>
> @@ -1973,6 +1982,8 @@ export namespace std
> #if __cpp_lib_out_ptr
> using std::out_ptr;
> using std::inout_ptr;
> + using std::out_ptr_t;
> + using std::inout_ptr_t;
> #endif
> #if __cpp_lib_indirect
> using std::indirect;
> @@ -2101,7 +2112,11 @@ export namespace std
> using std::lcm;
> using std::midpoint;
> #if __cpp_lib_ranges_iota
> - namespace ranges { using ranges::iota; }
> + namespace ranges
> + {
> + using ranges::iota;
> + using ranges::iota_result;
> + }
> #endif
> #if __cpp_lib_saturation_arithmetic
> using std::add_sat;
> @@ -2512,6 +2527,43 @@ export namespace std
> using std::regex_constants::operator|;
> using std::regex_constants::operator|=;
> using std::regex_constants::operator~;
> + using std::regex_constants::awk;
> + using std::regex_constants::basic;
> + using std::regex_constants::collate;
> + using std::regex_constants::ECMAScript;
> + using std::regex_constants::egrep;
> + using std::regex_constants::extended;
> + using std::regex_constants::grep;
> + using std::regex_constants::icase;
> + using std::regex_constants::multiline;
> + using std::regex_constants::nosubs;
> + using std::regex_constants::optimize;
> + using std::regex_constants::format_default;
> + using std::regex_constants::format_first_only;
> + using std::regex_constants::format_no_copy;
> + using std::regex_constants::format_sed;
> + using std::regex_constants::match_any;
> + using std::regex_constants::match_continuous;
> + using std::regex_constants::match_default;
> + using std::regex_constants::match_not_bol;
> + using std::regex_constants::match_not_bow;
> + using std::regex_constants::match_not_eol;
> + using std::regex_constants::match_not_eow;
> + using std::regex_constants::match_not_null;
> + using std::regex_constants::match_prev_avail;
> + using std::regex_constants::error_backref;
> + using std::regex_constants::error_badbrace;
> + using std::regex_constants::error_badrepeat;
> + using std::regex_constants::error_brace;
> + using std::regex_constants::error_brack;
> + using std::regex_constants::error_collate;
> + using std::regex_constants::error_complexity;
> + using std::regex_constants::error_ctype;
> + using std::regex_constants::error_escape;
> + using std::regex_constants::error_paren;
> + using std::regex_constants::error_range;
> + using std::regex_constants::error_space;
> + using std::regex_constants::error_stack;
> }
> using std::basic_regex;
> using std::csub_match;
> @@ -3153,6 +3205,10 @@ export namespace std
> using std::is_pointer_interconvertible_base_of_v;
> using std::is_pointer_interconvertible_with_class;
> #endif
> +#if __cpp_lib_is_scoped_enum
> + using std::is_scoped_enum;
> + using std::is_scoped_enum_v;
> +#endif
> }
>
> // <typeindex>
>
>
> Jakub
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20250804/62b3cca6/attachment.htm>
More information about the Libstdc++
mailing list