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.
