This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

3653. <coroutine> is freestanding, but uses std::hash which is not

Section: 17.13.2 [coroutine.syn] Status: New Submitter: Jonathan Wakely Opened: 2021-12-17 Last modified: 2025-11-11

Priority: 3

View all other issues in [coroutine.syn].

View all issues with New status.

Discussion:

The <coroutine> header is required for freestanding implementations, but it defines a specialization of std::hash, which is not required for freestanding implementations.

Presumably we should make the std::hash specialization conditionally present.

[2022-01-30; Reflector poll]

Set priority to 3 after reflector poll. Would be resolved by P1642 for C++23, but it's still a defect in C++20.

[2025-11-11; Jonathan adds wording for C++20.]

This wording would resolve the defect for C++20, but the issue should be closed as Resolved in C++23.

Proposed resolution:

This wording is relative to ISO/IEC 14882:2020(E).

  1. Modify 17.13.4.9 [coroutine.handle.hash] as indicated:
    template<class P> struct hash<coroutine_handle<P>>;
    

    -1- The specialization is enabled (22.10.19 [unord.hash]) in a hosted implementation.