On Tue, 2 Jun 2026 at 19:00, Jonathan Wakely <[email protected]> wrote:
>
> On Tue, 2 Jun 2026 at 18:04, Yuao Ma <[email protected]> wrote:
> >
> > On Tue, Jun 2, 2026 at 11:01 PM Jonathan Wakely <[email protected]> wrote:
> > >
> > > On Tue, 2 Jun 2026 at 15:59, Yuao Ma <[email protected]> wrote:
> > > >
> > > > Hi!
> > > >
> > > > This patch makes std::priority_queue constexpr as part of P3372R3. I
> > > > am unsure whether I should add the FTM here; since the constexpr
> > > > support for std::queue isn't complete yet, I have omitted the FTM from
> > > > this patch.
> > >
> > > Yes, that's the correct choice, thanks.
> > >
> > > > Tested on x86_64-linux. OK for trunk?
> > > >
> > > > Additionally, regarding the implementation strategy for other standard
> > > > containers like std::list, it seems inevitable that we will need to
> > > > move some function implementations (like _List_node_base) from the .cc
> > > > files to the headers. This looks like an ABI break. Is this
> > > > acceptable?
> > >
> > > No. It needs to be done without ABI breaks (which is possible, but
> > > awkward and complex).
> > >
> >
> > BTW, could you elaborate more on how to achieve this in general? The
> > only approach I can think of is using attributes like noinline and
> > default visibility.
>
> Neither of those.
>
> There are several ways. They only need to be constexpr (and therefore
> inline) for C++26, so the definitions can be copied into the headers
> like so:
>
> #if __cplusplus >= 202603L
> // inline definitions
> #endif
>
> and keep them in src/c++98/list.cc as well, where they are compiled
> with -std=gnu++98. (The code duplication can be solved easily enough
> by putting them in a dedicated header and appropriate use of macros.)
>
> Programs which expect to find the definitions in the library will
> still find them in the library, programs compiled with -std=gnu++26
> will get the definitions in the header. We already do similar things
> for std::string and everything in <stdexcept>.

See also how std::type_info::operator== is handled.

Reply via email to