|
1840 | 1840 | \tcode{match_results}\iref{re} are parameterized in terms of
|
1841 | 1841 | allocators.
|
1842 | 1842 |
|
1843 |
| -\begin{shortlibreqtab2} |
1844 |
| -{Descriptive variable definitions} |
1845 |
| -{allocator.req.var} |
1846 |
| -\topline |
1847 |
| -\lhdr{Variable} & \rhdr{Definition} \\ \capsep |
1848 |
| -\tcode{T, U, C} & any \cv-unqualified object type\iref{term.object.type} \\ \rowsep |
1849 |
| -\tcode{X} & an allocator class for type \tcode{T} \\ \rowsep |
1850 |
| -\tcode{Y} & the corresponding allocator class for type \tcode{U} \\ \rowsep |
1851 |
| -\tcode{XX} & the type \tcode{allocator_traits<X>} \\ \rowsep |
1852 |
| -\tcode{YY} & the type \tcode{allocator_traits<Y>} \\ \rowsep |
1853 |
| -\tcode{a, a1, a2} & lvalues of type \tcode{X} \\ \rowsep |
1854 |
| -\tcode{u} & the name of a variable being declared \\ \rowsep |
1855 |
| -\tcode{b} & a value of type \tcode{Y} \\ \rowsep |
1856 |
| -\tcode{c} & a pointer of type \tcode{C*} through which indirection is valid \\ \rowsep |
1857 |
| -\tcode{p} & a value of type \tcode{XX::pointer}, obtained |
1858 |
| -by calling \tcode{a1.allocate}, where \tcode{a1 == a} \\ \rowsep |
1859 |
| -\tcode{q} & a value of type \tcode{XX::const_pointer} |
1860 |
| -obtained by conversion from a value \tcode{p} \\ \rowsep |
1861 |
| -\tcode{r} & a value of type \tcode{T\&} |
1862 |
| -obtained by the expression \tcode{*p} \\ \rowsep |
1863 |
| -\tcode{w} & a value of type \tcode{XX::void_pointer} obtained by |
1864 |
| - conversion from a value \tcode{p} \\ \rowsep |
1865 |
| -\tcode{x} & a value of type \tcode{XX::const_void_pointer} obtained by |
1866 |
| - conversion from a value \tcode{q} or a value \tcode{w} \\ \rowsep |
1867 |
| -\tcode{y} & a value of type \tcode{XX::const_void_pointer} obtained by |
1868 |
| -conversion from a result value of \tcode{YY::allocate}, or else a value of |
1869 |
| -type (possibly \keyword{const}) \tcode{std::nullptr_t} \\ \rowsep |
1870 |
| -\tcode{n} & a value of type \tcode{XX::size_type} \\ \rowsep |
1871 |
| -\tcode{Args} & a template parameter pack \\ \rowsep |
1872 |
| -\tcode{args} & a function parameter pack with the pattern \tcode{Args\&\&} \\ |
1873 |
| -\end{shortlibreqtab2} |
| 1843 | +\pnum |
| 1844 | +In subclause \ref{allocator.requirements}, |
| 1845 | +\begin{itemize} |
| 1846 | +\item |
| 1847 | +\tcode{T}, \tcode{U}, \tcode{C} denote |
| 1848 | +any \cv-unqualified object type\iref{term.object.type}, |
| 1849 | +\item |
| 1850 | +\tcode{X} denotes an allocator class for type \tcode{T}, |
| 1851 | +\item |
| 1852 | +\tcode{Y} denotes the corresponding allocator class for type \tcode{U}, |
| 1853 | +\item |
| 1854 | +\tcode{XX} denotes the type \tcode{allocator_traits<X>}, |
| 1855 | +\item |
| 1856 | +\tcode{YY} denotes the type \tcode{allocator_traits<Y>}, |
| 1857 | +\item |
| 1858 | +\tcode{a}, \tcode{a1}, \tcode{a2} denote lvalues of type \tcode{X}, |
| 1859 | +\item |
| 1860 | +\tcode{u} denotes the name of a variable being declared, |
| 1861 | +\item |
| 1862 | +\tcode{b} denotes a value of type \tcode{Y}, |
| 1863 | +\item |
| 1864 | +\tcode{c} denotes a pointer of type \tcode{C*} |
| 1865 | +through which indirection is valid, |
| 1866 | +\item |
| 1867 | +\tcode{p} denotes a value of type \tcode{XX::pointer} |
| 1868 | +obtained by calling \tcode{a1.allocate}, where \tcode{a1 == a}, |
| 1869 | +\item |
| 1870 | +\tcode{q} denotes a value of type \tcode{XX::const_pointer} |
| 1871 | +obtained by conversion from a value \tcode{p}, |
| 1872 | +\item |
| 1873 | +\tcode{r} denotes a value of type \tcode{T\&} |
| 1874 | +obtained by the expression \tcode{*p}, |
| 1875 | +\item |
| 1876 | +\tcode{w} denotes a value of type \tcode{XX::void_pointer} |
| 1877 | +obtained by conversion from a value \tcode{p}, |
| 1878 | +\item |
| 1879 | +\tcode{x} denotes a value of type \tcode{XX::const_void_pointer} |
| 1880 | +obtained by conversion from a value \tcode{q} or a value \tcode{w}, |
| 1881 | +\item |
| 1882 | +\tcode{y} denotes a value of type \tcode{XX::const_void_pointer} |
| 1883 | +obtained by conversion from a result value of \tcode{YY::allocate}, or else |
| 1884 | +a value of type (possibly \tcode{const}) \tcode{std::nullptr_t}, |
| 1885 | +\item |
| 1886 | +\tcode{n} denotes a value of type \tcode{XX::size_type}, |
| 1887 | +\item |
| 1888 | +\tcode{Args} denotes a template parameter pack, and |
| 1889 | +\item |
| 1890 | +\tcode{args} denotes |
| 1891 | +a function parameter pack with the pattern \tcode{Args\&\&}. |
| 1892 | +\end{itemize} |
1874 | 1893 |
|
1875 | 1894 | \pnum
|
1876 | 1895 | The class template \tcode{allocator_traits}\iref{allocator.traits} supplies
|
1877 | 1896 | a uniform interface to all allocator types.
|
1878 |
| -\tref{allocator.req.var} describes the types manipulated |
1879 |
| -through allocators. \tref{cpp17.allocator} |
| 1897 | +\tref{cpp17.allocator} |
1880 | 1898 | describes the requirements on allocator types
|
1881 | 1899 | and thus on types used to instantiate \tcode{allocator_traits}. A requirement
|
1882 | 1900 | is optional if the last column of
|
|
1885 | 1903 | template, an optional requirement that is not supplied by an allocator is
|
1886 | 1904 | replaced by the specified default expression. A user specialization of
|
1887 | 1905 | \tcode{allocator_traits} may provide different defaults and may provide
|
1888 |
| -defaults for different requirements than the primary template. Within |
1889 |
| -Tables~\ref{tab:allocator.req.var} and~\ref{tab:cpp17.allocator}, |
1890 |
| -the use of \tcode{move} and \tcode{forward} always refers to \tcode{std::move} |
1891 |
| -and \tcode{std::forward}, respectively. |
| 1906 | +defaults for different requirements than the primary template. |
1892 | 1907 |
|
1893 | 1908 | \begin{libreqtab4d}
|
1894 | 1909 | {\oldconcept{Allocator} requirements}
|
|
0 commit comments