On Tue, Dec 2, 2025 at 10:20 AM Jonathan Wakely <[email protected]> wrote:

> On Tue, 2 Dec 2025 at 08:16, Tomasz Kaminski <[email protected]> wrote:
> >
> >
> >
> > On Mon, Dec 1, 2025 at 8:51 PM Patrick Palka <[email protected]> wrote:
> >>
> >> On Wed, 26 Nov 2025, Yuao Ma wrote:
> >>
> >> > Hello world,
> >> >
> >> > This patch adds constexpr support to flat_map and flat_multiset in
> >> > accordance with P3372R3. I have also added test cases to verify the
> >> > new constexpr functionality.
> >> > Tested on x86_64-linux.
> >> > Please take a look when you have time. Thanks!
> >>
> >> Thanks for the patch!
> >>
> >> > Subject: [PATCH] libstdc++: constexpr flat_set and flat_multiset
> >> >
> >> > This patch makes flat_map and flat_multiset constexpr as part of
> P3372R3.
> >>
> >> s/flat_map/flat_set
> >>
> >> >
> >> > libstdc++-v3/ChangeLog:
> >> >
> >> >       * include/bits/version.def: Add FTM.
> >> >       * include/bits/version.h: Regenerate.
> >> >       * include/std/flat_set: Add constexpr.
> >> >       * testsuite/23_containers/flat_multiset/constexpr.cc: New test.
> >> >       * testsuite/23_containers/flat_set/constexpr.cc: New test.
> >> > ---
> >> >  libstdc++-v3/include/bits/version.def         |   9 +
> >> >  libstdc++-v3/include/bits/version.h           |  10 +
> >> >  libstdc++-v3/include/std/flat_set             | 103 ++++++-
> >> >  .../23_containers/flat_multiset/constexpr.cc  | 239 +++++++++++++++++
> >> >  .../23_containers/flat_set/constexpr.cc       | 253
> ++++++++++++++++++
> >> >  5 files changed, 611 insertions(+), 3 deletions(-)
> >> >  create mode 100644
> libstdc++-v3/testsuite/23_containers/flat_multiset/constexpr.cc
> >> >  create mode 100644
> libstdc++-v3/testsuite/23_containers/flat_set/constexpr.cc
> >> >
> >> > diff --git a/libstdc++-v3/include/bits/version.def
> b/libstdc++-v3/include/bits/version.def
> >> > index 1fde9eef9d3..93965e914d5 100644
> >> > --- a/libstdc++-v3/include/bits/version.def
> >> > +++ b/libstdc++-v3/include/bits/version.def
> >> > @@ -1347,6 +1347,15 @@ ftms = {
> >> >    };
> >> >  };
> >> >
> >> > +ftms = {
> >> > +  name = constexpr_flat_set;
> >> > +  values = {
> >> > +    v = 202502;
> >> > +    cxxmin = 26;
> >> > +    hosted = yes;
> >>
> >> why hosted? flat_set isn't hosted IIRC
> >>
> >> What do people think of supporting this as an extension in C++23 mode?
> >> That way we could just specify constexpr instead of the ugly
> >> _GLIBCXX26_CONSTEXPR.
> >
> > This will lead to non-portable code, and while this is mostly a loud
> change
> > (i.e. code does not compile), the fact that following variable (as
> global) have static
> > vs dynamic initialization may be important:
> > flat_map<int, float> mapping = ....;
> > And may work correctly on libstdc++ in C++23 mode, while having order of
> initialization
> > issues in other compilers.
> >
> > So, I would preffer not having constexpr as an extension. Technically, I
> do not think
> > that adding constexpr can be done as extension, as we may change meaning
> of valid
> > C++20 program, but now taking a different if consteval branch.
>
> How about it we made all members constexpr *except* the constructors
> and destructor, which would use _GLIBCXX23_CONSTEXPR?
>
> I think that would avoid the portability problems (you couldn't create
> one during constant-initialization or during constant-evaluation) but
> would avoid the ugly CONSTEXPR macros on the other members.
>
I am hardly convinced that "ugly" macros inside standard implementation is
a problem
that is worth addressing. If we provide extension that does not enable
anything useful,
we should simply not do it.

Reply via email to