On Fri, 6 Feb 2026, 10:34 Tomasz Kaminski, <[email protected]> wrote:
> > > On Fri, Feb 6, 2026 at 10:14 AM Nathan Myers <[email protected]> wrote: > >> The commit 3f7905550483408a2c4c5096a1adc8d7e863eb12 defined a >> concept __heterogeneous_key using a name not defined in C++17. >> This is fixed by guarding the definition behind a name defined >> in C++23 the earliest Standard that uses the definition. >> >> https://gcc.gnu.org/pipermail/gcc-patches/2026-February/707814.html >> >> libstdc++-v3/ChangeLog >> * include/bits/stl_function.h (concept __heterogeneous_key): >> Guard with __glibcxx_associative_heterogeneous_erasure >> --- >> > LGTM, defining the concept only if we provide extensions that need them > is reasonable. We can always change that if more places will depend on that > and conditions will become unwieldy. > > I think you can commit that as an obvious fix, without need for Jonathan > approval. > Yes, I think it was already pushed. > libstdc++-v3/include/bits/stl_function.h | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/libstdc++-v3/include/bits/stl_function.h >> b/libstdc++-v3/include/bits/stl_function.h >> index 657f40bca2e..1312564216b 100644 >> --- a/libstdc++-v3/include/bits/stl_function.h >> +++ b/libstdc++-v3/include/bits/stl_function.h >> > The file does not include bits/version.h, so we assume that it is included > before, > and we already use __glibcxx_transparent_operators in the file, so this is > not a problem > of this change. I have looked, and we bring bits version via type_traits > inclusion. > > >> @@ -1525,7 +1525,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION >> #endif >> #endif >> >> -#ifdef __cpp_concepts >> +#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 >> template <typename _Kt, typename _Container> >> concept __not_container_iterator = >> (!is_convertible_v<_Kt&&, typename _Container::iterator> && >> @@ -1533,8 +1533,7 @@ template <typename _Kt, typename _Container> >> >> template <typename _Kt, typename _Container> >> concept __heterogeneous_key = >> - (!is_same_v<typename _Container::key_type, >> - typename remove_cvref<_Kt>::type>) && >> + (!is_same_v<typename _Container::key_type, remove_cvref_t<_Kt>>) && >> __not_container_iterator<_Kt, _Container>; >> #endif >> >> -- >> 2.52.0 >> >>
