_On Mon, 4 Aug 2025, Patrick Palka wrote:

> On Mon, 4 Aug 2025, Jakub Jelinek wrote:
> 
> > On Mon, Aug 04, 2025 at 11:33:17AM -0400, Patrick Palka wrote:
> > > > @@ -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;
> > > 
> > > Actually a few lines above we already do:
> > > 
> > >   // _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;
> > >   }
> > > 
> > > So I think we don't want to export iter_move and iter_swap directly...  
> > > Sorry
> > > for not catching this sooner :/
> > 
> > Oops, missed that (but already committed).
> > Note, I haven't seen errors when compiling the module but perhaps the
> > conflicts are diagnosed when using those after import std;?
> 
> IIRC Jason ran into these errors when experiminting with using the std
> module for the entire libstdc++ testsuite?  I don't think we have any
> direct tests for it ATM.

Forgot to CC Jason

> 
> > 
> > Anyway, will test following to undo that.
> > 
> > For later, I think it would be useful to commit an improved version of
> > the plugin and say compile it during make check, maintain some whitelist
> > and diagnose new symbols that appear; plus if not already done try to
> > compile during make check the std.cc etc. modules in all the supported
> > language modes.  So that when people add new features get notified if
> > they haven't updated std.cc.in.  And this std::ranges::iter_{move,swap}
> > case could there be as an exception next to entities removed in C++17/20.
> 
> That'd be nice!  It's too easy to forget to update std.cc.in
> Basically every non-uglified symbol should be exprorted.
> 
> > 
> > BTW, there are some entities removed in C++23 which are not exported:
> > using std::declare_no_pointers;
> > using std::declare_reachable;
> > using std::get_pointer_safety;
> > using std::get_unexpected;
> > using std::pointer_safety;
> > using std::set_unexpected;
> > using std::undeclare_no_pointers;
> > using std::undeclare_reachable;
> > using std::unexpected_handler;
> > Wonder if they should be exported in C++20 only or kept unexported.
> 
> The unexpected stuff seem to be removed in C++17?  The GC stuff we never
> really implemented so there's probably no point in exporting them.
> 
> > 
> > 2025-08-04  Jakub Jelinek  <ja...@redhat.com>
> > 
> >     PR libstdc++/121373
> >     * src/c++23/std.cc.in (std::ranges::iter_move, std::ranges::iter_swap):
> >     Remove exports.
> 
> LGTM FWIW
> 
> > 
> > --- libstdc++-v3/std.cc.in.jj       2025-08-04 17:12:52.133783084 +0200
> > +++ libstdc++-v3/std.cc.in  2025-08-04 17:45:00.651437214 +0200
> > @@ -1697,8 +1697,6 @@ 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;
> >    }
> > 
> > 
> >     Jakub
> > 
> > 
> 

Reply via email to