At 2.2, the Py<type>_Check() family of API functions (macros) changed
semantics to include subtypes.  Most concrete object APIs then had
a Py<type>_CheckExact() macro added to test for an object's type
not including subtypes.

The PyDict_CheckExact() macro wasn't created at that time, so I've added
it for API completeness/symmetry - even though nobody has complained
about its absence in the time since 2.2 was released.

Not a backport candidate.
diff --git a/Doc/api/concrete.tex b/Doc/api/concrete.tex
index 143c988..99bb0df 100644
--- a/Doc/api/concrete.tex
+++ b/Doc/api/concrete.tex
@@ -1803,6 +1803,12 @@
   \versionchanged[Allowed subtypes to be accepted]{2.2}
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{int}{PyDict_CheckExact}{PyObject *p}
+  Return true if \var{p} is a dict object, but not an instance of a
+  subtype of the dict type.
+  \versionadded{2.4}
+\end{cfuncdesc}
+
 \begin{cfuncdesc}{PyObject*}{PyDict_New}{}
   Returns a new empty dictionary, or \NULL{} on failure.
 \end{cfuncdesc}