Skip to content

Commit 6b56330

Browse files
burblebeetkoeppe
authored andcommitted
LWG3775 Broken dependencies in the Cpp17Allocator requirements
1 parent 60c60bb commit 6b56330

File tree

1 file changed

+39
-39
lines changed

1 file changed

+39
-39
lines changed

source/lib-intro.tex

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,11 +2047,11 @@
20472047
\begin{itemdescr}
20482048
\pnum
20492049
\mandates
2050-
\tcode{X::pointer} is convertible to \tcode{X::const_pointer}.
2050+
\tcode{XX::pointer} is convertible to \tcode{XX::const_pointer}.
20512051

20522052
\pnum
20532053
\remarks
2054-
Default: \tcode{pointer_traits<X::pointer>::rebind<const T>}
2054+
Default: \tcode{pointer_traits<XX::pointer>::rebind<const T>}
20552055
\end{itemdescr}
20562056

20572057
\begin{itemdecl}
@@ -2062,13 +2062,13 @@
20622062
\begin{itemdescr}
20632063
\pnum
20642064
\mandates
2065-
\tcode{X::pointer} is convertible to \tcode{X::void_pointer}.
2066-
\tcode{X::void_pointer} and \tcode{Y::void_pointer} are the same type.
2065+
\tcode{XX::pointer} is convertible to \tcode{XX::void_pointer}.
2066+
\tcode{XX::void_pointer} and \tcode{YY::void_pointer} are the same type.
20672067

20682068
\pnum
20692069
\remarks
20702070
Default:
2071-
\tcode{pointer_traits<X::pointer>::rebind<void>}
2071+
\tcode{pointer_traits<XX::pointer>::rebind<void>}
20722072
\end{itemdescr}
20732073

20742074
\begin{itemdecl}
@@ -2079,15 +2079,15 @@
20792079
\begin{itemdescr}
20802080
\pnum
20812081
\mandates
2082-
\tcode{X::pointer}, \tcode{X::const_pointer}, and \tcode{X::void_pointer}
2083-
are convertible to \tcode{X::const_void_pointer}.
2084-
\tcode{X::const_void_pointer} and \tcode{Y::const_void_pointer}
2082+
\tcode{XX::pointer}, \tcode{XX::const_pointer}, and \tcode{XX::void_pointer}
2083+
are convertible to \tcode{XX::const_void_pointer}.
2084+
\tcode{XX::const_void_pointer} and \tcode{YY::const_void_pointer}
20852085
are the same type.
20862086

20872087
\pnum
20882088
\remarks
20892089
Default:
2090-
\tcode{pointer_traits<X::pointer>::rebind<const void>}
2090+
\tcode{pointer_traits<XX::pointer>::rebind<const void>}
20912091
\end{itemdescr}
20922092

20932093
\begin{itemdecl}
@@ -2113,7 +2113,7 @@
21132113
\pnum
21142114
\remarks
21152115
Default:
2116-
\tcode{make_unsigned_t<X::difference_type>}
2116+
\tcode{make_unsigned_t<XX::difference_type>}
21172117
\end{itemdescr}
21182118

21192119
\begin{itemdecl}
@@ -2129,7 +2129,7 @@
21292129
\pnum
21302130
\remarks
21312131
Default:
2132-
\tcode{pointer_traits<X::pointer>::difference_type}
2132+
\tcode{pointer_traits<XX::pointer>::difference_type}
21332133
\end{itemdescr}
21342134

21352135
\begin{itemdecl}
@@ -2144,7 +2144,7 @@
21442144
\pnum
21452145
\ensures
21462146
For all \tcode{U} (including \tcode{T}),
2147-
\tcode{Y::template rebind<T>::other} is \tcode{X}.
2147+
\tcode{YY::rebind_alloc<T>} is \tcode{X}.
21482148

21492149
\pnum
21502150
\remarks
@@ -2230,41 +2230,41 @@
22302230
\end{itemdescr}
22312231

22322232
\begin{itemdecl}
2233-
static_cast<X::pointer>(w)
2233+
static_cast<XX::pointer>(w)
22342234
\end{itemdecl}
22352235

22362236
\begin{itemdescr}
22372237
\pnum
22382238
\result
2239-
\tcode{X::pointer}
2239+
\tcode{XX::pointer}
22402240

22412241
\pnum
22422242
\ensures
2243-
\tcode{static_cast<X::pointer>(w) == p}.
2243+
\tcode{static_cast<XX::pointer>(w) == p}.
22442244
\end{itemdescr}
22452245

22462246
\begin{itemdecl}
2247-
static_cast<X::const_pointer>(x)
2247+
static_cast<XX::const_pointer>(x)
22482248
\end{itemdecl}
22492249

22502250
\begin{itemdescr}
22512251
\pnum
22522252
\result
2253-
\tcode{X::const_pointer}
2253+
\tcode{XX::const_pointer}
22542254

22552255
\pnum
22562256
\ensures
2257-
\tcode{static_cast<X::const_pointer>(x) == q}.
2257+
\tcode{static_cast<XX::const_pointer>(x) == q}.
22582258
\end{itemdescr}
22592259

22602260
\begin{itemdecl}
2261-
pointer_traits<X::pointer>::pointer_to(r)
2261+
pointer_traits<XX::pointer>::pointer_to(r)
22622262
\end{itemdecl}
22632263

22642264
\begin{itemdescr}
22652265
\pnum
22662266
\result
2267-
\tcode{X::pointer}
2267+
\tcode{XX::pointer}
22682268

22692269
\pnum
22702270
\ensures
@@ -2278,7 +2278,7 @@
22782278
\begin{itemdescr}
22792279
\pnum
22802280
\result
2281-
\tcode{X::pointer}
2281+
\tcode{XX::pointer}
22822282

22832283
\pnum
22842284
\effects
@@ -2316,7 +2316,7 @@
23162316
\begin{itemdescr}
23172317
\pnum
23182318
\result
2319-
\tcode{X::pointer}
2319+
\tcode{XX::pointer}
23202320

23212321
\pnum
23222322
\effects
@@ -2335,11 +2335,11 @@
23352335
\begin{itemdescr}
23362336
\pnum
23372337
\result
2338-
\tcode{allocation_result<X::pointer>}
2338+
\tcode{allocation_result<XX::pointer>}
23392339

23402340
\pnum
23412341
\returns
2342-
\tcode{allocation_result<X::pointer>\{ptr, count\}}
2342+
\tcode{allocation_result<XX::pointer>\{ptr, count\}}
23432343
where \tcode{ptr} is memory allocated for an array of \tcode{count} \tcode{T}
23442344
and such an object is created but array elements are not constructed,
23452345
such that $\tcode{count} \geq \tcode{n}$.
@@ -2397,11 +2397,11 @@
23972397
\begin{itemdescr}
23982398
\pnum
23992399
\result
2400-
\tcode{X::size_type}
2400+
\tcode{XX::size_type}
24012401

24022402
\pnum
24032403
\returns
2404-
The largest value that can meaningfully be passed to \tcode{X::allocate()}.
2404+
The largest value \tcode{n} that can meaningfully be passed to \tcode{a.allocate(n)}.
24052405

24062406
\pnum
24072407
\remarks
@@ -2458,7 +2458,7 @@
24582458

24592459
\pnum
24602460
\returns
2461-
\tcode{a == Y::rebind<T>::other(b)}.
2461+
\tcode{a == YY::rebind_alloc<T>(b)}.
24622462
\end{itemdescr}
24632463

24642464
\begin{itemdecl}
@@ -2677,43 +2677,43 @@
26772677
\pnum
26782678
An allocator type \tcode{X} shall meet the
26792679
\oldconcept{CopyConstructible} requirements (\tref{cpp17.copyconstructible}).
2680-
The \tcode{X::pointer}, \tcode{X::const_pointer}, \tcode{X::void_pointer}, and
2681-
\tcode{X::const_void_pointer} types shall meet the
2680+
The \tcode{XX::pointer}, \tcode{XX::const_pointer}, \tcode{XX::void_pointer}, and
2681+
\tcode{XX::const_void_pointer} types shall meet the
26822682
\oldconcept{Nullable\-Pointer} requirements (\tref{cpp17.nullablepointer}).
26832683
No constructor,
26842684
comparison operator function, copy operation, move operation, or swap operation on
2685-
these pointer types shall exit via an exception. \tcode{X::pointer} and \tcode{X::const_pointer} shall also
2685+
these pointer types shall exit via an exception. \tcode{XX::pointer} and \tcode{XX::const_pointer} shall also
26862686
meet the requirements for
26872687
a \oldconcept{RandomAccessIterator}\iref{random.access.iterators} and
2688-
the additional requirement that, when \tcode{a} and \tcode{(a + n)} are
2688+
the additional requirement that, when \tcode{p} and \tcode{(p + n)} are
26892689
dereferenceable pointer values for some integral value \tcode{n},
26902690
\begin{codeblock}
2691-
addressof(*(a + n)) == addressof(*a) + n
2691+
addressof(*(p + n)) == addressof(*p) + n
26922692
\end{codeblock}
26932693
is \tcode{true}.
26942694

26952695
\pnum
26962696
Let \tcode{x1} and \tcode{x2} denote objects of (possibly different) types
2697-
\tcode{X::void_pointer}, \tcode{X::const_void_pointer}, \tcode{X::pointer},
2698-
or \tcode{X::const_pointer}. Then, \tcode{x1} and \tcode{x2} are
2697+
\tcode{XX::void_pointer}, \tcode{XX::const_void_pointer}, \tcode{XX::pointer},
2698+
or \tcode{XX::const_pointer}. Then, \tcode{x1} and \tcode{x2} are
26992699
\defn{equivalently-valued} pointer values, if and only if both \tcode{x1} and \tcode{x2}
27002700
can be explicitly converted to the two corresponding objects \tcode{px1} and \tcode{px2}
2701-
of type \tcode{X::const_pointer}, using a sequence of \keyword{static_cast}s
2701+
of type \tcode{XX::const_pointer}, using a sequence of \keyword{static_cast}s
27022702
using only these four types, and the expression \tcode{px1 == px2}
27032703
evaluates to \tcode{true}.
27042704

27052705
\pnum
2706-
Let \tcode{w1} and \tcode{w2} denote objects of type \tcode{X::void_pointer}.
2706+
Let \tcode{w1} and \tcode{w2} denote objects of type \tcode{XX::void_pointer}.
27072707
Then for the expressions
27082708
\begin{codeblock}
27092709
w1 == w2
27102710
w1 != w2
27112711
\end{codeblock}
27122712
either or both objects may be replaced by an equivalently-valued object of type
2713-
\tcode{X::const_void_pointer} with no change in semantics.
2713+
\tcode{XX::const_void_pointer} with no change in semantics.
27142714

27152715
\pnum
2716-
Let \tcode{p1} and \tcode{p2} denote objects of type \tcode{X::pointer}.
2716+
Let \tcode{p1} and \tcode{p2} denote objects of type \tcode{XX::pointer}.
27172717
Then for the expressions
27182718
\begin{codeblock}
27192719
p1 == p2
@@ -2725,7 +2725,7 @@
27252725
p1 - p2
27262726
\end{codeblock}
27272727
either or both objects may be replaced by an equivalently-valued object of type
2728-
\tcode{X::const_pointer} with no change in semantics.
2728+
\tcode{XX::const_pointer} with no change in semantics.
27292729

27302730
\pnum
27312731
An allocator may constrain the types on which it can be instantiated and the

0 commit comments

Comments
 (0)