Proposed resolution:
This wording is relative to N3936.
Change [associative.reqmts] Table 102 as indicated (Editorial note: For "expression" X::key_compare "defaults to" is redundant with the class definitions for map/etc.):
Table 102 — Associative container requirements Expression Return type Assertion/note pre-/post-condition Complexity … X::key_compare Compare defaults to less<key_type>
Requires: key_compare is CopyConstructible.compile time … X(c)
X a(c);Requires: key_compare is CopyConstructible.
Effects: Constructs an empty container. Uses a copy of c as a comparison object.constant … X(i,j,c)
X a(i,j,c);Requires: key_compare is CopyConstructible.
value_type is EmplaceConstructible into X from *i.
Effects: Constructs […][…] …
Change [unord.req] Table 103 as indicated:
Table 103 — Unordered associative container requirements (in addition to container) Expression Return type Assertion/note pre-/post-condition Complexity … X::key_equal Pred Requires: Pred is CopyConstructible.
Pred shall be a binary predicate that takes two arguments of type Key.
Pred is an equivalence relation.compile time … X(n, hf, eq)
X a(n, hf, eq);X Requires: hasher and key_equal are CopyConstructible.
Effects: Constructs […][…] … X(n, hf)
X a(n, hf);X Requires: hasher is CopyConstructible and
key_equal is DefaultConstructible
Effects: Constructs […][…] … X(i, j, n, hf, eq)
X a(i, j, n, hf, eq);X Requires: hasher and key_equal are CopyConstructible.
value_type is EmplaceConstructible into X from *i.
Effects: Constructs […][…] … X(i, j, n, hf)
X a(i, j, n, hf);X Requires: hasher is CopyConstructible and
key_equal is DefaultConstructible
value_type is EmplaceConstructible into X from *i.
Effects: Constructs […][…] …