3512. Incorrect exception safety guarantee for unordered containers

Section: 22.10.19 [unord.hash] Status: New Submitter: Jonathan Wakely Opened: 2020-12-28 Last modified: 2021-01-29

Priority: 3

View all other issues in [unord.hash].

View all issues with New status.

Discussion:

See this editorial issue.

22.10.19 [unord.hash] p5.4 ends with "shall not throw an exception unless hash<Key> is a program-defined specialization that depends on at least one program-defined type."

This seems wrong, because hash<optional<T>> is not a program-defined specialization, but it might throw if hash<T> can throw. There are also other partial specializations of std::hash defined in the standard library but that depend on program-defined specializations and so can throw.

[2021-01-29; reflector prioritization]

Set priority to 3 following reflector discussions. It was pointed out that this wording could be simplified if 3513 changes the definition of program-defined type.

Proposed resolution: