On Sat, Mar 18, 2023 at 7:36 AM Jonathan Wakely via Libstdc++ <libstd...@gcc.gnu.org> wrote: > > Tested x86_64-linux. Pushed to trunk. gcc-12 backport needed too. > > -- >8 -- > > libstdc++-v3/ChangeLog: > > PR libstdc++/109165 > * include/std/coroutine (hash<>::operator()): Add const. > * testsuite/18_support/coroutines/hash.cc: New test. > --- > libstdc++-v3/include/std/coroutine | 2 +- > .../testsuite/18_support/coroutines/hash.cc | 22 +++++++++++++++++++ > 2 files changed, 23 insertions(+), 1 deletion(-) > create mode 100644 libstdc++-v3/testsuite/18_support/coroutines/hash.cc > > diff --git a/libstdc++-v3/include/std/coroutine > b/libstdc++-v3/include/std/coroutine > index f6e65566f10..b0ca18949db 100644 > --- a/libstdc++-v3/include/std/coroutine > +++ b/libstdc++-v3/include/std/coroutine > @@ -345,7 +345,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > struct hash<coroutine_handle<_Promise>> > { > size_t > - operator()(const coroutine_handle<_Promise>& __h) noexcept > + operator()(const coroutine_handle<_Promise>& __h) const noexcept > { > return reinterpret_cast<size_t>(__h.address()); > } > diff --git a/libstdc++-v3/testsuite/18_support/coroutines/hash.cc > b/libstdc++-v3/testsuite/18_support/coroutines/hash.cc > new file mode 100644 > index 00000000000..68e5e640477 > --- /dev/null > +++ b/libstdc++-v3/testsuite/18_support/coroutines/hash.cc > @@ -0,0 +1,22 @@ > +// { dg-options "-std=gnu++2a" } > +// { dg-do run { target c++2a } } > + > +#include <coroutine> > +#include <testsuite_hooks.h> > + > +void > +test01() > +{ > + std::hash<std::noop_coroutine_handle> h; > + std::size_t v = h(std::noop_coroutine()); > + > + const auto& ch = h; > + std::size_t v2 = h(std::noop_coroutine()); // PR libstdc++/109165
Is this supposed to be `std::size_t v2 = ch(...)`? > + > + VERIFY( v2 == v ); > +} > + > +int main() > +{ > + test01(); > +} > -- > 2.39.2 >