diff --git a/xml/issue4180.xml b/xml/issue4180.xml
new file mode 100644
index 0000000000..b6cff242ea
--- /dev/null
+++ b/xml/issue4180.xml
@@ -0,0 +1,106 @@
+
+
+
+
+The usual pattern in
+This wording is relative to
++ ++[Drafting note:
+[flat.multimap.modifiers] is already OK ditto: it does not exist. ] + +is already OK as far as this issue is concerned: +it has no wording for `emplace`. +
Modify
++ ++template<class... Args> iterator emplace(Args&&... args); +++++-1- Mandates
+-2- Effects: First, direct-non-list-initializes an object `t` of type `value_type` with +std::forward<Args>(args)..., then inserts `t` as if by: + +Constraints: is_constructible_v<value_type, Args...> is true. +++auto it = ranges::upper_bound(c, t, compare); +c.insert(it, std::move(t)); ++-3- Returns: An iterator that points to the inserted element. +
+
Modify
++ ++template<class... Args> pair<iterator, bool> emplace(Args&&... args); +++++-1- Mandates
+-2- Effects: First, direct-non-list-iConstraints: is_constructible_v<value_typepair<key_type, mapped_type>, Args...> +is true. +Initializes an object `t` of type +value_typepair<key_type, mapped_type>with std::forward<Args>(args)...; +if the map already contains an element whose key is equivalent to `t.first`, `*this` is unchanged. Otherwise, equivalent to: + +++auto key_it = ranges::upper_bound(c.keys, t.first, compare); +auto value_it = c.values.begin() + distance(c.keys.begin(), key_it); +c.keys.insert(key_it, std::move(t.first)); +c.values.insert(value_it, std::move(t.second)); ++-3- Returns: The `bool` component of the returned pair is `true` if and only if the insertion took place, and +the iterator component of the pair points to the element with key equivalent to `t.first`. +
+