Imported Upstream version 1.72.0
[platform/upstream/boost.git] / doc / html / poly_collection / reference.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
5 <title>Reference</title>
6 <link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
7 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8 <link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9 <link rel="up" href="../poly_collection.html" title="Chapter&#160;28.&#160;Boost.PolyCollection">
10 <link rel="prev" href="performance.html" title="Performance">
11 <link rel="next" href="future_work.html" title="Future work">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table cellpadding="2" width="100%"><tr>
15 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
16 <td align="center"><a href="../../../index.html">Home</a></td>
17 <td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
18 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20 <td align="center"><a href="../../../more/index.htm">More</a></td>
21 </tr></table>
22 <hr>
23 <div class="spirit-nav">
24 <a accesskey="p" href="performance.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="future_work.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
25 </div>
26 <div class="section">
27 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
28 <a name="poly_collection.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
29 </h2></div></div></div>
30 <div class="toc"><dl class="toc">
31 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphism_models">Polymorphism
32       models</a></span></dt>
33 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers">Polymorphic
34       containers</a></span></dt>
35 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_exc">Header
36       <code class="computeroutput"><span class="string">"boost/poly_collection/exception.hpp"</span></code>
37       synopsis</a></span></dt>
38 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_bas">Header
39       <code class="computeroutput"><span class="string">"boost/poly_collection/base_collection_fwd.hpp"</span></code>
40       synopsis</a></span></dt>
41 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0">Header
42       <code class="computeroutput"><span class="string">"boost/poly_collection/base_collection.hpp"</span></code>
43       synopsis</a></span></dt>
44 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_fun">Header
45       <code class="computeroutput"><span class="string">"boost/poly_collection/function_collection_fwd.hpp"</span></code>
46       synopsis</a></span></dt>
47 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0">Header
48       <code class="computeroutput"><span class="string">"boost/poly_collection/function_collection.hpp"</span></code>
49       synopsis</a></span></dt>
50 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_any">Header
51       <code class="computeroutput"><span class="string">"boost/poly_collection/any_collection_fwd.hpp"</span></code>
52       synopsis</a></span></dt>
53 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_an0">Header
54       <code class="computeroutput"><span class="string">"boost/poly_collection/any_collection.hpp"</span></code>
55       synopsis</a></span></dt>
56 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_alg">Header
57       <code class="computeroutput"><span class="string">"boost/poly_collection/algorithm.hpp"</span></code>
58       synopsis</a></span></dt>
59 </dl></div>
60 <div class="section">
61 <div class="titlepage"><div><div><h3 class="title">
62 <a name="poly_collection.reference.polymorphism_models"></a><a class="link" href="reference.html#poly_collection.reference.polymorphism_models" title="Polymorphism models">Polymorphism
63       models</a>
64 </h3></div></div></div>
65 <p>
66         The key aspect of dynamic polymorphism is the ability for a value of type
67         <code class="computeroutput"><span class="identifier">T</span></code> to internally use another
68         value of a possibily different type <code class="computeroutput"><span class="identifier">U</span></code>
69         for the implementation of a given interface. Base/derived polymorphism is
70         the classic model of dynamic polymorphism in C++, but not the only possible
71         one.
72       </p>
73 <p>
74         Formally, a <span class="emphasis"><em>polymorphism model</em></span> is defined by
75       </p>
76 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
77 <li class="listitem">
78             A family <span class="bold"><strong>Interface</strong></span> of permissible interface
79             types and, for each <code class="computeroutput"><span class="identifier">I</span></code>
80             &#8712; <span class="bold"><strong>Interface</strong></span>, the family <span class="bold"><strong>Implementation</strong></span>(<code class="computeroutput"><span class="identifier">I</span></code>)
81             of types satisfying <code class="computeroutput"><span class="identifier">I</span></code>.
82           </li>
83 <li class="listitem">
84             For a given interface type <code class="computeroutput"><span class="identifier">I</span></code>,
85             an operation <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>) that maps each value of an implementation
86             type to its internally used value <code class="computeroutput"><span class="identifier">y</span></code>
87             of a possibly different implementation type <a href="#ftn.poly_collection.reference.polymorphism_models.f0" class="footnote" name="poly_collection.reference.polymorphism_models.f0"><sup class="footnote">[22]</sup></a>.
88           </li>
89 </ul></div>
90 <p>
91         Static polymorphism is the trivial case where <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>) = <code class="computeroutput"><span class="identifier">x</span></code>
92         for all <code class="computeroutput"><span class="identifier">x</span></code>. Base/derived polymorphism
93         is characterized by:
94       </p>
95 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
96 <li class="listitem">
97             <span class="bold"><strong>Interface</strong></span> = { <code class="computeroutput"><span class="identifier">Base</span></code>
98             : <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_polymorphic_v</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span></code>
99             }.
100           </li>
101 <li class="listitem">
102             <span class="bold"><strong>Implementation</strong></span>(<code class="computeroutput"><span class="identifier">Base</span></code>)
103             = { <code class="computeroutput"><span class="identifier">Derived</span></code> : <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_base_of_v</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">&gt;</span></code>
104             }.
105           </li>
106 <li class="listitem">
107             <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>)
108             = <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">Derived</span><span class="special">&amp;&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
109             with <code class="computeroutput"><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">x</span><span class="special">)==</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span></code>.
110           </li>
111 </ul></div>
112 </div>
113 <div class="section">
114 <div class="titlepage"><div><div><h3 class="title">
115 <a name="poly_collection.reference.polymorphic_containers"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers" title="Polymorphic containers">Polymorphic
116       containers</a>
117 </h3></div></div></div>
118 <div class="toc"><dl class="toc"><dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections">Polymorphic
119         collections</a></span></dt></dl></div>
120 <p>
121         A <span class="emphasis"><em>polymorphic container</em></span> is an object that stores objects
122         of some type <code class="computeroutput"><span class="identifier">T</span></code> implementing
123         a given interface <code class="computeroutput"><span class="identifier">I</span></code> under
124         an implicitly associated polymorphism model. Polymorphic containers satisfy
125         the requirements for <a href="http://en.cppreference.com/w/cpp/named_req/Container" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">Container</span></code></strong></span></a>
126         and <a href="http://en.cppreference.com/w/cpp/named_req/AllocatorAwareContainer" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">AllocatorAwareContainer</span></code></strong></span></a>
127         with the following modifications:
128       </p>
129 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
130 <li class="listitem">
131             Where it occurs, replace the requirement that <code class="computeroutput"><span class="identifier">T</span></code>
132             be <a href="http://en.cppreference.com/w/cpp/named_req/CopyInsertable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyInsertable</span></code></strong></span></a>,
133             <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>,
134             <a href="http://en.cppreference.com/w/cpp/named_req/MoveInsertable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveInsertable</span></code></strong></span></a>,
135             <a href="http://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveAssignable</span></code></strong></span></a>
136             or <a href="http://en.cppreference.com/w/cpp/named_req/EqualityComparable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></strong></span></a>,
137             with the following semantic clause: may throw if some subobject in the
138             container is not <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
139             (respectively, <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>,
140             <a href="http://en.cppreference.com/w/cpp/named_req/MoveConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveConstructible</span></code></strong></span></a>,
141             <a href="http://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveAssignable</span></code></strong></span></a>,
142             <a href="http://en.cppreference.com/w/cpp/named_req/EqualityComparable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></strong></span></a>).
143           </li>
144 <li class="listitem">
145             Replace [container.requirements.general]/3 with: <code class="computeroutput"><span class="identifier">allocator_type</span></code>
146             must have the property that for any type <code class="computeroutput"><span class="identifier">U</span></code>
147             implementing <code class="computeroutput"><span class="identifier">I</span></code> and the
148             associated type <code class="computeroutput"><span class="identifier">A</span></code> =
149             <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">allocator_type</span><span class="special">&gt;::</span><span class="identifier">rebind_alloc</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>,
150             <code class="computeroutput"><span class="identifier">U</span></code> is <a href="http://en.cppreference.com/w/cpp/named_req/CopyInsertable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyInsertable</span></code></strong></span></a>
151             (respectively <a href="http://en.cppreference.com/w/cpp/named_req/MoveInsertable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveInsertable</span></code></strong></span></a>)
152             with respect to <code class="computeroutput"><span class="identifier">A</span></code> if
153             and only if <code class="computeroutput"><span class="identifier">U</span></code> is <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
154             (respectively <a href="http://en.cppreference.com/w/cpp/named_req/MoveConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveConstructible</span></code></strong></span></a>);
155             all subobjects of type <code class="computeroutput"><span class="identifier">U</span></code>
156             stored in these containers shall be constructed using the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">construct</span></code> function and destroyed using
157             the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">destroy</span></code> function; these functions (or
158             their equivalents for a rebound allocator) are called only for the types
159             of the stored subobjects, not for any other type (internal or public)
160             used by the container.
161           </li>
162 </ul></div>
163 <div class="section">
164 <div class="titlepage"><div><div><h4 class="title">
165 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections" title="Polymorphic collections">Polymorphic
166         collections</a>
167 </h4></div></div></div>
168 <div class="toc"><dl class="toc">
169 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types">Types</a></span></dt>
170 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy">Construct/copy/destroy</a></span></dt>
171 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration">Type
172           registration</a></span></dt>
173 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators">Iterators</a></span></dt>
174 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity">Capacity</a></span></dt>
175 <dt><span class="section"><a href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers">Modifiers</a></span></dt>
176 </dl></div>
177 <p>
178           <span class="emphasis"><em>Polymorphic collections</em></span> store their objects of type
179           <code class="computeroutput"><span class="identifier">value_type</span></code> in <span class="emphasis"><em>segments</em></span>
180           dedicated to each of the types of the contained subojects. Only objects
181           whose subobjects are of an <span class="emphasis"><em>acceptable</em></span> type are allowed,
182           where a type <code class="computeroutput"><span class="identifier">U</span></code> is said
183           to be acceptable if
184         </p>
185 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
186 <li class="listitem">
187               it implements the interface associated to the container,
188             </li>
189 <li class="listitem">
190               it is <a href="http://en.cppreference.com/w/cpp/named_req/MoveConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveConstructible</span></code></strong></span></a>,
191             </li>
192 <li class="listitem">
193               it is <a href="http://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveAssignable</span></code></strong></span></a>
194               or <a href="http://en.cppreference.com/w/cpp/types/is_move_constructible" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_nothrow_move_constructible</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">value</span></code></a> is <code class="computeroutput"><span class="keyword">true</span></code>.
195             </li>
196 </ul></div>
197 <p>
198           Polymorphic collections conform to the requirements of <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers" title="Polymorphic containers"><span class="bold"><strong><code class="computeroutput"><span class="identifier">PolymorphicContainer</span></code></strong></span></a>
199           with the following modfications and extra guarantees:
200         </p>
201 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
202 <li class="listitem">
203               The complexity of <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> is linear on the number of segments
204               of the collection.
205             </li>
206 <li class="listitem">
207               <code class="computeroutput"><span class="identifier">max_size</span><span class="special">()</span></code>
208               is not provided.
209             </li>
210 <li class="listitem">
211               <code class="computeroutput"><span class="identifier">a</span><span class="special">==</span><span class="identifier">b</span></code> evaluates to <code class="computeroutput"><span class="keyword">true</span></code>
212               iff for each non-empty segment of subojects of type <code class="computeroutput"><span class="identifier">U</span></code>
213               in <code class="computeroutput"><span class="identifier">a</span></code> there is a segment
214               of <code class="computeroutput"><span class="identifier">U</span></code> in <code class="computeroutput"><span class="identifier">b</span></code> with the same size and equal elements
215               in the same order, and vice versa.
216             </li>
217 <li class="listitem">
218               No exceptions are thrown associated to some subobject type not being
219               <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>,
220               <a href="http://en.cppreference.com/w/cpp/named_req/MoveConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveConstructible</span></code></strong></span></a>
221               or <a href="http://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveAssignable</span></code></strong></span></a>.
222             </li>
223 </ul></div>
224 <p>
225           A type <code class="computeroutput"><span class="identifier">U</span></code> is said to be
226           <span class="emphasis"><em>registered</em></span> into the collection if a (possibly empty)
227           segment for <code class="computeroutput"><span class="identifier">U</span></code> has been
228           created. Registered types continue to stay so for the duration of the container
229           except if it is moved from, assigned to, or swapped.
230         </p>
231 <p>
232           Each segment has an associated capacity indicating the maximum size that
233           it can attain without reallocation. When the limit is exceeded (or explicitly
234           through <code class="computeroutput"><span class="identifier">reserve</span></code>) new storage
235           space is allocated with greater capacity and elements are moved.
236         </p>
237 <p>
238           Collection traversal goes through the elements of the first segment, then
239           the second, etc. The order in which segments are visited is unspecified
240           but remains stable until a new segment is created.
241         </p>
242 <p>
243           Besides <code class="computeroutput"><span class="identifier">iterator</span></code> and <code class="computeroutput"><span class="identifier">const_iterator</span></code>, there are iterator types
244           <code class="computeroutput"><span class="identifier">local_base_iterator</span></code> and
245           <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
246           (and their <code class="computeroutput"><span class="identifier">const_</span></code> counterparts)
247           whose objects can be used to iterate over the segment for <code class="computeroutput"><span class="identifier">U</span></code> (in the same order followed by global
248           traversal). Local base iterators refer to <code class="computeroutput"><span class="identifier">value_type</span></code>,
249           whereas (<code class="computeroutput"><span class="identifier">const_</span></code>)<code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
250           refers to <code class="computeroutput"><span class="identifier">U</span></code>. All local
251           iterators model <a href="http://en.cppreference.com/w/cpp/named_req/RandomAccessIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">RandomAccessIterator</span></code></strong></span></a>.
252           Local base iterators may not be used to iterate across segments, and comparing
253           local base iterators associated to different segments is undefined behavior.
254           A (const) local base iterator to a segment for <code class="computeroutput"><span class="identifier">U</span></code>
255           can be explicitly converted to (<code class="computeroutput"><span class="identifier">const_</span></code>)<code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
256           pointing to the same position, and vice versa.
257         </p>
258 <p>
259           Insertion and erasure do not invalidate iterators (global or local) except
260           those from the insertion/erasure point to the end of the affected segment,
261           if its capacity is not exceeded, or all iterators/references to the segment
262           otherwise <a href="#ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.f0" class="footnote" name="poly_collection.reference.polymorphic_containers.polymorphic_collections.f0"><sup class="footnote">[23]</sup></a>.
263         </p>
264 <p>
265           For the description of the remaining requirements of polymorphic collections,
266           we use the following notation:
267         </p>
268 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
269 <li class="listitem">
270               <code class="computeroutput"><span class="identifier">C</span></code> is a polymorphic
271               collection type,
272             </li>
273 <li class="listitem">
274               <code class="computeroutput"><span class="identifier">c</span></code> is an object of type
275               <code class="computeroutput"><span class="identifier">C</span></code>, <code class="computeroutput"><span class="identifier">cc</span></code>
276               is a possibly <code class="computeroutput"><span class="keyword">const</span></code> object
277               of type <code class="computeroutput"><span class="identifier">C</span></code>,
278             </li>
279 <li class="listitem">
280               <code class="computeroutput"><span class="identifier">al</span></code> is a value of type
281               <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">allocator_type</span></code>,
282             </li>
283 <li class="listitem">
284               <code class="computeroutput"><span class="identifier">info</span></code> is a <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span></code>,
285             </li>
286 <li class="listitem">
287               <code class="computeroutput"><span class="identifier">U</span></code> is an acceptable
288               type, <code class="computeroutput"><span class="identifier">Us</span><span class="special">...</span></code>
289               is a template parameter pack of acceptable types,
290             </li>
291 <li class="listitem">
292               <code class="computeroutput"><span class="identifier">n</span></code> is a value of <code class="computeroutput"><span class="identifier">size_type</span></code>,
293             </li>
294 <li class="listitem">
295               <code class="computeroutput"><span class="identifier">x</span></code> is a value of a type
296               <code class="computeroutput"><span class="identifier">T</span></code> implementing the
297               interface associated to the collection,
298             </li>
299 <li class="listitem">
300               <code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code>
301               is a function parameter pack of types <code class="computeroutput"><span class="identifier">Args</span><span class="special">&amp;&amp;...</span></code>,
302             </li>
303 <li class="listitem">
304               <code class="computeroutput"><span class="identifier">it</span></code> is a possibly const
305               global iterator of <code class="computeroutput"><span class="identifier">c</span></code>,
306             </li>
307 <li class="listitem">
308               <code class="computeroutput"><span class="identifier">it1</span></code> and <code class="computeroutput"><span class="identifier">it2</span></code> are (same-typed) possibly const
309               global iterators of a <code class="computeroutput"><span class="identifier">C</span></code>
310               collection other than <code class="computeroutput"><span class="identifier">c</span></code>
311               such that [<code class="computeroutput"><span class="identifier">it1</span></code>, <code class="computeroutput"><span class="identifier">it2</span></code>) is a valid range.
312             </li>
313 <li class="listitem">
314               <code class="computeroutput"><span class="identifier">lbit</span></code> is a possibly
315               const local base iterator of <code class="computeroutput"><span class="identifier">c</span></code>,
316             </li>
317 <li class="listitem">
318               <code class="computeroutput"><span class="identifier">lbit1</span></code> and <code class="computeroutput"><span class="identifier">lbit2</span></code> are (same-typed) possibly const
319               local base iterators of a <code class="computeroutput"><span class="identifier">C</span></code>
320               collection other than <code class="computeroutput"><span class="identifier">c</span></code>
321               such that [<code class="computeroutput"><span class="identifier">lbit1</span></code>,
322               <code class="computeroutput"><span class="identifier">lbit2</span></code>) is a valid range.
323             </li>
324 <li class="listitem">
325               <code class="computeroutput"><span class="identifier">lit</span></code> is a (<code class="computeroutput"><span class="identifier">const_</span></code>)<code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> of <code class="computeroutput"><span class="identifier">c</span></code>,
326             </li>
327 <li class="listitem">
328               <code class="computeroutput"><span class="identifier">lit1</span></code> and <code class="computeroutput"><span class="identifier">lit2</span></code> are (same-typed) (<code class="computeroutput"><span class="identifier">const_</span></code>)<code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>s of a <code class="computeroutput"><span class="identifier">C</span></code>
329               collection other than <code class="computeroutput"><span class="identifier">c</span></code>
330               such that [<code class="computeroutput"><span class="identifier">lit1</span></code>, <code class="computeroutput"><span class="identifier">lit2</span></code>) is a valid range,
331             </li>
332 <li class="listitem">
333               <code class="computeroutput"><span class="identifier">i1</span></code> and <code class="computeroutput"><span class="identifier">i2</span></code> are iterators external to <code class="computeroutput"><span class="identifier">c</span></code> referring to <code class="computeroutput"><span class="identifier">T</span></code>
334               such that [<code class="computeroutput"><span class="identifier">i1</span></code>, <code class="computeroutput"><span class="identifier">i2</span></code>) is a valid range,
335             </li>
336 <li class="listitem">
337               <code class="computeroutput"><span class="identifier">j1</span></code> and <code class="computeroutput"><span class="identifier">j2</span></code> are iterators external to <code class="computeroutput"><span class="identifier">c</span></code> such that [<code class="computeroutput"><span class="identifier">j1</span></code>,
338               <code class="computeroutput"><span class="identifier">j2</span></code>) is a valid range,
339             </li>
340 <li class="listitem">
341               <code class="computeroutput"><span class="identifier">xit1</span></code> and <code class="computeroutput"><span class="identifier">xit2</span></code> are (same-typed) possibly const
342               iterators (global or local) of <code class="computeroutput"><span class="identifier">c</span></code>
343               such that [<code class="computeroutput"><span class="identifier">xit1</span></code>, <code class="computeroutput"><span class="identifier">xit2</span></code>) is a valid range.
344             </li>
345 </ul></div>
346 <div class="section">
347 <div class="titlepage"><div><div><h5 class="title">
348 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types" title="Types">Types</a>
349 </h5></div></div></div>
350 <p>
351             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_base_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">local_base_iterator</span></code>
352           </p>
353 <p>
354             <a href="http://en.cppreference.com/w/cpp/named_req/RandomAccessIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">RandomAccessIterator</span></code></strong></span></a>
355             with same value type, difference type and pointer and reference types
356             as <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">iterator</span></code>, valid for accessing elements
357             of a given segment. Implicily convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_base_iterator</span></code>,
358             explicitly convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> if the segment it points to is actually
359             that for <code class="computeroutput"><span class="identifier">U</span></code>.
360           </p>
361 <p>
362             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_base_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_base_iterator</span></code>
363           </p>
364 <p>
365             <a href="http://en.cppreference.com/w/cpp/named_req/RandomAccessIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">RandomAccessIterator</span></code></strong></span></a>
366             with same value type, difference type and pointer and reference types
367             as <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_iterator</span></code>, valid for accessing
368             elements of a given segment. Explicitly convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
369             if the segment it points to is actually that for <code class="computeroutput"><span class="identifier">U</span></code>.
370           </p>
371 <p>
372             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
373           </p>
374 <p>
375             <a href="http://en.cppreference.com/w/cpp/named_req/RandomAccessIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">RandomAccessIterator</span></code></strong></span></a>
376             with value type <code class="computeroutput"><span class="identifier">U</span></code>, reference
377             type <code class="computeroutput"><span class="identifier">U</span><span class="special">&amp;</span></code>,
378             pointer type <code class="computeroutput"><span class="identifier">U</span><span class="special">*</span></code>
379             and the same difference type as <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">iterator</span></code>,
380             valid for accessing elements of the segment for <code class="computeroutput"><span class="identifier">U</span></code>.
381             Implicily convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>, explicitly convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">local_base_iterator</span></code>.
382           </p>
383 <p>
384             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
385           </p>
386 <p>
387             <a href="http://en.cppreference.com/w/cpp/named_req/RandomAccessIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">RandomAccessIterator</span></code></strong></span></a>
388             with value type <code class="computeroutput"><span class="identifier">U</span></code>, reference
389             type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span></code>, pointer type <code class="computeroutput"><span class="keyword">const</span>
390             <span class="identifier">U</span><span class="special">*</span></code>
391             and the same difference type as <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">iterator</span></code>,
392             valid for accessing elements of the segment for <code class="computeroutput"><span class="identifier">U</span></code>.
393             Explicitly convertible to <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_local_base_iterator</span></code>.
394           </p>
395 <p>
396             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info</span></code>
397           </p>
398 <p>
399             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
400             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
401             type with information about a given segment of a collection. If <code class="computeroutput"><span class="identifier">ci</span></code> is a possibly <code class="computeroutput"><span class="keyword">const</span></code>
402             object of type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info</span></code> associated
403             to the segment of <code class="computeroutput"><span class="identifier">c</span></code> for
404             <code class="computeroutput"><span class="identifier">U</span></code>, then
405           </p>
406 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
407 <li class="listitem">
408                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
409               </li>
410 <li class="listitem">
411                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
412               </li>
413 <li class="listitem">
414                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
415               </li>
416 <li class="listitem">
417                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
418               </li>
419 <li class="listitem">
420                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">end</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
421               </li>
422 <li class="listitem">
423                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cend</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
424               </li>
425 <li class="listitem">
426                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
427               </li>
428 <li class="listitem">
429                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
430               </li>
431 <li class="listitem">
432                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">type_info</span><span class="special">()==</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">)</span></code>
433               </li>
434 </ul></div>
435 <p>
436             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info</span></code>
437           </p>
438 <p>
439             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
440             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
441             type publicly derived from <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info</span></code>
442             and exposing its public interface. Additionally, if <code class="computeroutput"><span class="identifier">i</span></code>
443             is an object of type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info</span></code>
444             associated to the segment of <code class="computeroutput"><span class="identifier">c</span></code>
445             for <code class="computeroutput"><span class="identifier">U</span></code>, then
446           </p>
447 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
448 <li class="listitem">
449                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
450               </li>
451 <li class="listitem">
452                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
453               </li>
454 <li class="listitem">
455                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">end</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">U</span><span class="special">))</span></code>
456               </li>
457 <li class="listitem">
458                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
459               </li>
460 </ul></div>
461 <p>
462             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
463           </p>
464 <p>
465             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
466             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
467             type with information about the segment for <code class="computeroutput"><span class="identifier">U</span></code>.
468             If <code class="computeroutput"><span class="identifier">ci</span></code> is a possibly
469             <code class="computeroutput"><span class="keyword">const</span></code> object of type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
470             associated to the collection <code class="computeroutput"><span class="identifier">c</span></code>,
471             then
472           </p>
473 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
474 <li class="listitem">
475                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
476               </li>
477 <li class="listitem">
478                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
479               </li>
480 <li class="listitem">
481                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">end</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
482               </li>
483 <li class="listitem">
484                 <code class="computeroutput"><span class="identifier">ci</span><span class="special">.</span><span class="identifier">cend</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
485               </li>
486 </ul></div>
487 <p>
488             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
489           </p>
490 <p>
491             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
492             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
493             type publicly derived from <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> and exposing its public interface.
494             Additionally, if <code class="computeroutput"><span class="identifier">i</span></code> is
495             an object of type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
496             associated to the collection <code class="computeroutput"><span class="identifier">c</span></code>,
497             then
498           </p>
499 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
500 <li class="listitem">
501                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
502               </li>
503 <li class="listitem">
504                 <code class="computeroutput"><span class="identifier">i</span><span class="special">.</span><span class="identifier">end</span><span class="special">()==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
505               </li>
506 </ul></div>
507 <p>
508             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info_iterator</span></code>
509           </p>
510 <p>
511             <a href="http://en.cppreference.com/w/cpp/named_req/InputIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">InputIterator</span></code></strong></span></a>
512             with value type and reference type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info</span></code>.
513           </p>
514 <p>
515             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info_iterator"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info_iterator</span></code>
516           </p>
517 <p>
518             <a href="http://en.cppreference.com/w/cpp/named_req/InputIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">InputIterator</span></code></strong></span></a>
519             with value type and reference type <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info</span></code>.
520           </p>
521 <p>
522             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_traversal_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_segment_traversal_info</span></code>
523           </p>
524 <p>
525             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
526             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
527             type with <code class="computeroutput"><span class="keyword">const</span></code> member functions
528             <code class="computeroutput"><span class="identifier">begin</span></code>/<code class="computeroutput"><span class="identifier">cbegin</span></code>
529             and <code class="computeroutput"><span class="identifier">end</span></code>/<code class="computeroutput"><span class="identifier">cend</span></code> returning <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info_iterator</span></code>
530             objects that span over a range of <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_base_segment_info</span></code>
531             objects.
532           </p>
533 <p>
534             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_traversal_info"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">segment_traversal_info</span></code>
535           </p>
536 <p>
537             <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
538             and <a href="http://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyAssignable</span></code></strong></span></a>
539             type publicly derived from with <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">const_segment_traversal_info</span></code>
540             and exposing its public interface. Additionally, provides non-const member
541             functions <code class="computeroutput"><span class="identifier">begin</span></code> and
542             <code class="computeroutput"><span class="identifier">end</span></code> returning <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info_iterator</span></code> objects
543             that span over an equivalent range of <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">base_segment_info</span></code>
544             objects.
545           </p>
546 </div>
547 <div class="section">
548 <div class="titlepage"><div><div><h5 class="title">
549 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy" title="Construct/copy/destroy">Construct/copy/destroy</a>
550 </h5></div></div></div>
551 <p>
552             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy.range_construction"></a><code class="computeroutput"><span class="identifier">C</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">)</span></code><br>
553             <code class="computeroutput"><span class="identifier">C</span> <span class="identifier">d</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">)</span></code>
554           </p>
555 <p>
556             <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">allocator_type</span></code>
557             is <a href="http://en.cppreference.com/w/cpp/named_req/DefaultConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">DefaultConstructible</span></code></strong></span></a>.
558             [<code class="computeroutput"><span class="identifier">j1</span></code>, <code class="computeroutput"><span class="identifier">j2</span></code>)
559             can be inserted into <code class="computeroutput"><span class="identifier">C</span></code>.<br>
560             <span class="bold"><strong>Effects:</strong></span> Copy constructs the internal
561             allocator from <code class="computeroutput"><span class="identifier">C</span><span class="special">::</span><span class="identifier">allocator_type</span><span class="special">()</span></code>.
562             Internally calls <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">)</span></code>
563             on construction.
564           </p>
565 <p>
566             <code class="computeroutput"><span class="identifier">C</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">,</span><span class="identifier">al</span><span class="special">)</span></code><br>
567             <code class="computeroutput"><span class="identifier">C</span> <span class="identifier">d</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">,</span><span class="identifier">al</span><span class="special">)</span></code>
568           </p>
569 <p>
570             <span class="bold"><strong>Requires:</strong></span> [<code class="computeroutput"><span class="identifier">j1</span></code>,
571             <code class="computeroutput"><span class="identifier">j2</span></code>) can be inserted into
572             <code class="computeroutput"><span class="identifier">C</span></code>.<br> <span class="bold"><strong>Effects:</strong></span>
573             Copy constructs the internal allocator from <code class="computeroutput"><span class="identifier">al</span></code>.
574             Internally calls <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">)</span></code>
575             on construction.
576           </p>
577 </div>
578 <div class="section">
579 <div class="titlepage"><div><div><h5 class="title">
580 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration" title="Type registration">Type
581           registration</a>
582 </h5></div></div></div>
583 <p>
584             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.register_types"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">register_types</span><span class="special">&lt;</span><span class="identifier">Us</span><span class="special">...&gt;()</span></code>
585           </p>
586 <p>
587             <span class="bold"><strong>Effects:</strong></span> Registers (if needed) each
588             of the indicated types in the collection.
589           </p>
590 <p>
591             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"></a><code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">is_registered</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
592             <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">is_registered</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
593           </p>
594 <p>
595             <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">true</span></code>
596             iff the indicated type is registered in the collection.
597           </p>
598 </div>
599 <div class="section">
600 <div class="titlepage"><div><div><h5 class="title">
601 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators" title="Iterators">Iterators</a>
602 </h5></div></div></div>
603 <p>
604             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"></a>(1)
605             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
606             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
607             (3) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br> (4) <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br> (5) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
608             (6) <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
609           </p>
610 <p>
611             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">local_base_iterator</span></code>
612             (1) or <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (2) or <code class="computeroutput"><span class="identifier">const_local_base_iterator</span></code>
613             (3,4) or <code class="computeroutput"><span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (5,6) to the beginning of the segment
614             for the indicated type.<br> <span class="bold"><strong>Throws:</strong></span>
615             If the indicated type is not registered.
616           </p>
617 <p>
618             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"></a>(1)
619             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
620             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
621             (3) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br> (4) <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">cend</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br> (5) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
622             (6) <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">cend</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
623           </p>
624 <p>
625             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">local_base_iterator</span></code>
626             (1) or <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (2) or <code class="computeroutput"><span class="identifier">const_local_base_iterator</span></code>
627             (3,4) or <code class="computeroutput"><span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (5,6) to the end of the segment for
628             the indicated type.<br> <span class="bold"><strong>Throws:</strong></span> If
629             the indicated type is not registered.
630           </p>
631 <p>
632             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"></a>(1)
633             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">segment</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
634             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">segment</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
635             (3) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">segment</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br> (4) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">segment</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
636           </p>
637 <p>
638             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">base_segment_info</span></code>
639             (1) or <code class="computeroutput"><span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
640             (2) or <code class="computeroutput"><span class="identifier">const_base_segment_info</span></code>
641             (3) or <code class="computeroutput"><span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (4) object referring to the segment
642             for the indicated type.<br> <span class="bold"><strong>Throws:</strong></span>
643             If the indicated type is not registered.
644           </p>
645 <p>
646             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"></a>(1)
647             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">segment_traversal</span><span class="special">()</span></code><br>
648             (2) <code class="computeroutput"><span class="keyword">const_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">C</span><span class="special">&amp;&gt;(</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">segment_traversal</span><span class="special">()</span></code>
649           </p>
650 <p>
651             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">segment_traversal_info</span></code>
652             (1) or <code class="computeroutput"><span class="identifier">const_segment_traversal_info</span></code>
653             (2) object spanning over a range of segment descriptors for the collection.
654             The order in which segments are visited matches that of [<code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>,
655             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>).
656           </p>
657 </div>
658 <div class="section">
659 <div class="titlepage"><div><div><h5 class="title">
660 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity" title="Capacity">Capacity</a>
661 </h5></div></div></div>
662 <p>
663             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"></a><code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">empty</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
664             <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">empty</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
665           </p>
666 <p>
667             <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">true</span></code>
668             iff the segment for the indicated type exists and is empty.<br> <span class="bold"><strong>Throws:</strong></span> If the indicated type is not registered.
669           </p>
670 <p>
671             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"></a><code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
672             <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">size</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
673           </p>
674 <p>
675             <span class="bold"><strong>Returns:</strong></span> The size of the segment for
676             the indicated type.<br> <span class="bold"><strong>Throws:</strong></span> If
677             the indicated type is not registered.
678           </p>
679 <p>
680             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"></a><code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">max_size</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
681             <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">max_size</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
682           </p>
683 <p>
684             <span class="bold"><strong>Returns:</strong></span> The maximum size attainable
685             by the segment for the indicated type.<br> <span class="bold"><strong>Throws:</strong></span>
686             If the indicated type is not registered.
687           </p>
688 <p>
689             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"></a><code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
690             <code class="computeroutput"><span class="identifier">cc</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code><br>
691           </p>
692 <p>
693             <span class="bold"><strong>Returns:</strong></span> The maximum size that the segment
694             for the indicated type can attain without requiring reallocation.<br>
695             <span class="bold"><strong>Throws:</strong></span> If the indicated type is not
696             registered.
697           </p>
698 <p>
699             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
700           </p>
701 <p>
702             <span class="bold"><strong>Effects:</strong></span> Calls <code class="computeroutput"><span class="identifier">reserve</span></code>
703             with <code class="computeroutput"><span class="identifier">n</span></code> for each of the
704             segments of the collection.
705           </p>
706 <p>
707             (1) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">info</span><span class="special">,</span><span class="identifier">n</span><span class="special">)</span></code><br>
708             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;(</span><span class="identifier">n</span><span class="special">)</span></code>
709           </p>
710 <p>
711             <span class="bold"><strong>Effects:</strong></span> Throws if the type indicated
712             by <code class="computeroutput"><span class="identifier">info</span></code> is not registered
713             (1) or registers <code class="computeroutput"><span class="identifier">U</span></code> if
714             needed (2). If <code class="computeroutput"><span class="identifier">n</span></code> is greater
715             than the current capacity of the segment for the indicated type, new
716             storage space is allocated with a capacity of at least <code class="computeroutput"><span class="identifier">n</span></code> and elements are moved there.<br>
717             <span class="bold"><strong>Complexity:</strong></span> Linear in the size of the
718             segment if reallocation happens, constant otherwise.<br> <span class="bold"><strong>Throws:</strong></span> <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">length_error</span></code>
719             if <code class="computeroutput"><span class="identifier">n</span></code> is greater than
720             the return value of <code class="computeroutput"><span class="identifier">max_size</span></code>
721             for the segment.
722           </p>
723 <p>
724             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">shrink_to_fit</span><span class="special">()</span></code>
725           </p>
726 <p>
727             <span class="bold"><strong>Effects:</strong></span> Calls <code class="computeroutput"><span class="identifier">shrink_to_fit</span></code>
728             for each of the segments of the collection.
729           </p>
730 <p>
731             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">shrink_to_fit</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
732             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">shrink_to_fit</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
733           </p>
734 <p>
735             <span class="bold"><strong>Effects:</strong></span> Non-binding request to reduce
736             memory usage while preserving the sequence of elements of the segment
737             for the indicated type. May invalidate all iterators and references to
738             the segment.<br> <span class="bold"><strong>Throws:</strong></span> If the indicated
739             type is not registered.
740           </p>
741 </div>
742 <div class="section">
743 <div class="titlepage"><div><div><h5 class="title">
744 <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers"></a><a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers" title="Modifiers">Modifiers</a>
745 </h5></div></div></div>
746 <p>
747             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"></a>(1)
748             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">...)</span></code><br>
749             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">emplace_hint</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>
750           </p>
751 <p>
752             <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">U</span></code>
753             is constructible from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code>.<br> <span class="bold"><strong>Effects:</strong></span>
754             Registers <code class="computeroutput"><span class="identifier">U</span></code> (if needed)
755             and inserts a new element with a subobject constructed from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code>:
756             (1) at the end of the segment for <code class="computeroutput"><span class="identifier">U</span></code>;
757             (2) just before the position indicated by <code class="computeroutput"><span class="identifier">it</span></code>,
758             if it points to the segment for <code class="computeroutput"><span class="identifier">U</span></code>,
759             or at the end of the segment for <code class="computeroutput"><span class="identifier">U</span></code>
760             otherwise.<br> <span class="bold"><strong>Returns:</strong></span> An <code class="computeroutput"><span class="identifier">iterator</span></code> to the newly inserted element.<br>
761             <span class="bold"><strong>Complexity:</strong></span> Amortized constant time
762             plus linear in the distance from the insertion position to the end of
763             the segment.
764           </p>
765 <p>
766             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace_pos"></a>(1)
767             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">emplace_pos</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;(</span><span class="identifier">lbit</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
768             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">emplace_pos</span><span class="special">(</span><span class="identifier">lit</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>
769           </p>
770 <p>
771             <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">U</span></code>
772             is constructible from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code>. (1) <code class="computeroutput"><span class="identifier">lbit</span></code>
773             points to the segment for <code class="computeroutput"><span class="identifier">U</span></code>.<br>
774             <span class="bold"><strong>Effects:</strong></span> Inserts a new element with
775             a subobject constructed from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...</span></code> just before the position indicated.<br>
776             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">local_base_iterator</span></code>
777             (1) or <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (2) to the newly inserted element.<br>
778             <span class="bold"><strong>Complexity:</strong></span> Amortized constant time
779             plus linear in the distance from the insertion position to the end of
780             the segment.
781           </p>
782 <p>
783             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"></a>(1)
784             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code><br>
785             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">x</span><span class="special">)</span></code>
786           </p>
787 <p>
788             <span class="bold"><strong>Effects:</strong></span> Let <code class="computeroutput"><span class="identifier">Q</span></code>
789             be the type of the subobject of <code class="computeroutput"><span class="identifier">x</span></code>.
790             If <code class="computeroutput"><span class="identifier">Q</span></code> = <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">T</span></code>
791             is acceptable, registers <code class="computeroutput"><span class="identifier">T</span></code>
792             if needed. If <code class="computeroutput"><span class="identifier">Q</span></code> = <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">T</span></code>
793             is not acceptable, throws. If <code class="computeroutput"><span class="identifier">Q</span></code>
794             &#8800; <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">Q</span></code> is not registered, throws. If <code class="computeroutput"><span class="identifier">x</span></code> is not a non-const rvalue expression
795             and <code class="computeroutput"><span class="identifier">Q</span></code> is not <a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>,
796             throws. Inserts an element with a subobject move constructed or copy
797             constructed from the subobject of <code class="computeroutput"><span class="identifier">x</span></code>:
798             (1) at the end of the corresponding segment; (2) just before the position
799             indicated by <code class="computeroutput"><span class="identifier">it</span></code>, if it
800             points to the corresponding segment, or at the end of the segment otherwise.<br>
801             <span class="bold"><strong>Returns:</strong></span> An <code class="computeroutput"><span class="identifier">iterator</span></code>
802             to the newly inserted element.<br> <span class="bold"><strong>Complexity:</strong></span>
803             Amortized constant time plus linear in the distance from the insertion
804             position to the end of the segment.
805           </p>
806 <p>
807             (1) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lbit</span><span class="special">,</span><span class="identifier">x</span><span class="special">)</span></code><br>
808             (2) <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lit</span><span class="special">,</span><span class="identifier">x</span><span class="special">)</span></code>
809           </p>
810 <p>
811             <span class="bold"><strong>Requires:</strong></span> The type of the subobject
812             of <code class="computeroutput"><span class="identifier">x</span></code> corresponds to the
813             indicated segment.<br> <span class="bold"><strong>Effects:</strong></span> Inserts
814             an element with a subobject move constructed or copy constructed from
815             the subobject of <code class="computeroutput"><span class="identifier">x</span></code> just
816             before the position indicated.<br> <span class="bold"><strong>Returns:</strong></span>
817             A <code class="computeroutput"><span class="identifier">local_base_iterator</span></code>
818             (1) or <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> (2) to the newly inserted element.<br>
819             <span class="bold"><strong>Complexity:</strong></span> Amortized constant time
820             plus linear in the distance from the insertion position to the end of
821             the segment.
822           </p>
823 <p>
824             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_range"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span><span class="identifier">i2</span><span class="special">)</span></code>
825           </p>
826 <p>
827             <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">while</span><span class="special">(</span><span class="identifier">i1</span><span class="special">!=</span><span class="identifier">i2</span><span class="special">)</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(*</span><span class="identifier">i1</span><span class="special">++)</span></code>.
828           </p>
829 <p>
830             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it1</span><span class="special">,</span><span class="identifier">it2</span><span class="special">)</span></code><br>
831             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lbit1</span><span class="special">,</span><span class="identifier">lbit2</span><span class="special">)</span></code><br>
832             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lit1</span><span class="special">,</span><span class="identifier">lit2</span><span class="special">)</span></code>
833           </p>
834 <p>
835             <span class="bold"><strong>Effects:</strong></span> For each of the elements of
836             the range in succession, registers the type of its subobject if needed
837             and inserts it into the collection <a href="#ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f0" class="footnote" name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f0"><sup class="footnote">[24]</sup></a>.
838           </p>
839 <p>
840             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_hint_range"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">i1</span><span class="special">,</span><span class="identifier">i2</span><span class="special">)</span></code>
841           </p>
842 <p>
843             <span class="bold"><strong>Effects:</strong></span> If <code class="computeroutput"><span class="identifier">it</span><span class="special">==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>, equivalent to <code class="computeroutput"><span class="keyword">while</span><span class="special">(</span><span class="identifier">i1</span><span class="special">!=</span><span class="identifier">i2</span><span class="special">)</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,*</span><span class="identifier">i1</span><span class="special">++)</span></code>, otherwise inserts each of the elements
844             in [<code class="computeroutput"><span class="identifier">i1</span></code>, <code class="computeroutput"><span class="identifier">i2</span></code>) in succession with a hint pointing
845             to <code class="computeroutput"><span class="special">*</span><span class="identifier">it</span></code>
846             <a href="#ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f1" class="footnote" name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f1"><sup class="footnote">[25]</sup></a>.
847           </p>
848 <p>
849             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">it1</span><span class="special">,</span><span class="identifier">it2</span><span class="special">)</span></code><br>
850             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">lbit1</span><span class="special">,</span><span class="identifier">lbit2</span><span class="special">)</span></code><br>
851             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">it</span><span class="special">,</span><span class="identifier">lit1</span><span class="special">,</span><span class="identifier">lit2</span><span class="special">)</span></code>
852           </p>
853 <p>
854             <span class="bold"><strong>Effects:</strong></span> If <code class="computeroutput"><span class="identifier">it</span><span class="special">==</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>, equivalent to the corresponding hint-less
855             version, otherwise for each of the elements in [<code class="computeroutput"><span class="identifier">i1</span></code>,
856             <code class="computeroutput"><span class="identifier">i2</span></code>) in succession registers
857             the type of its subobject if needed and inserts it into the collection
858             with a hint pointing to <code class="computeroutput"><span class="special">*</span><span class="identifier">it</span></code> <a href="#ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f2" class="footnote" name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f2"><sup class="footnote">[26]</sup></a>.
859           </p>
860 <p>
861             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lbit</span><span class="special">,</span><span class="identifier">i1</span><span class="special">,</span><span class="identifier">i2</span><span class="special">)</span></code>
862           </p>
863 <p>
864             <span class="bold"><strong>Requires:</strong></span> The subojects of elements
865             in [<code class="computeroutput"><span class="identifier">i1</span></code>, <code class="computeroutput"><span class="identifier">i2</span></code>) are all of the type corresponding
866             to the indicated segment.<br> <span class="bold"><strong>Effects:</strong></span>
867             Inserts a range of elements with subobjects copy constructed from those
868             in [<code class="computeroutput"><span class="identifier">i1</span></code>, <code class="computeroutput"><span class="identifier">i2</span></code>) just before <code class="computeroutput"><span class="identifier">lbit</span></code>.<br>
869             <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">local_base_iterator</span></code>
870             to the beginning of the inserted range.
871           </p>
872 <p>
873             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">lit</span><span class="special">,</span><span class="identifier">j1</span><span class="special">,</span><span class="identifier">j2</span><span class="special">)</span></code>
874           </p>
875 <p>
876             <span class="bold"><strong>Requires:</strong></span> For each value <code class="computeroutput"><span class="identifier">x</span></code> in [<code class="computeroutput"><span class="identifier">j1</span></code>,
877             <code class="computeroutput"><span class="identifier">j2</span></code>) either (a) <code class="computeroutput"><span class="identifier">x</span></code> is of a type implementing the interface
878             associated to the collection and the subobject of <code class="computeroutput"><span class="identifier">x</span></code>
879             is of type <code class="computeroutput"><span class="identifier">U</span></code> or (b)
880             <code class="computeroutput"><span class="identifier">U</span></code> is constructible from
881             <code class="computeroutput"><span class="identifier">x</span></code>.<br> <span class="bold"><strong>Effects:</strong></span>
882             Inserts a range of elements with subobjects copy constructed (a) or constructed
883             (b) from the values in [<code class="computeroutput"><span class="identifier">j1</span></code>,
884             <code class="computeroutput"><span class="identifier">j2</span></code>) just before <code class="computeroutput"><span class="identifier">lit</span></code>.<br> <span class="bold"><strong>Returns:</strong></span>
885             A <code class="computeroutput"><span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
886             to the beginning of the inserted range.
887           </p>
888 <p>
889             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">xit1</span><span class="special">)</span></code><br>
890             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">xit1</span><span class="special">,</span><span class="identifier">xit2</span><span class="special">)</span></code>
891           </p>
892 <p>
893             <span class="bold"><strong>Effects:</strong></span> Erases the indicated element(s).<br>
894             <span class="bold"><strong>Returns:</strong></span> A non-const iterator of the
895             same category as <code class="computeroutput"><span class="identifier">xit</span></code>
896             pointing to the position just after the erased element(s).<br> <span class="bold"><strong>Complexity:</strong></span> Linear on the number of elements erased
897             plus the distance from the last one to the end of its segment.
898           </p>
899 <p>
900             <a name="poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"></a><code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></code>
901           </p>
902 <p>
903             <span class="bold"><strong>Effects:</strong></span> Erases all the elements of
904             the container.<br> <span class="bold"><strong>Complexity:</strong></span> Linear.
905           </p>
906 <p>
907             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">clear</span><span class="special">(</span><span class="identifier">info</span><span class="special">)</span></code><br>
908             <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">clear</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;()</span></code>
909           </p>
910 <p>
911             <span class="bold"><strong>Effects:</strong></span> Erases all the elements of
912             the segment for the indicated type.<br> <span class="bold"><strong>Complexity:</strong></span>
913             Linear in the size of the segment.<br> <span class="bold"><strong>Throws:</strong></span>
914             If the indicated type is not registered.
915           </p>
916 </div>
917 </div>
918 </div>
919 <div class="section">
920 <div class="titlepage"><div><div><h3 class="title">
921 <a name="poly_collection.reference.header_boost_poly_collection_exc"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc" title='Header "boost/poly_collection/exception.hpp" synopsis'>Header
922       <code class="computeroutput"><span class="string">"boost/poly_collection/exception.hpp"</span></code>
923       synopsis</a>
924 </h3></div></div></div>
925 <div class="toc"><dl class="toc">
926 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_unregistered_type">Class
927         <code class="computeroutput"><span class="identifier">unregistered_type</span></code></a></span></dt>
928 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_copy_constructible">Class
929         <code class="computeroutput"><span class="identifier">not_copy_constructible</span></code></a></span></dt>
930 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_equality_comparable">Class
931         <code class="computeroutput"><span class="identifier">not_equality_comparable</span></code></a></span></dt>
932 </dl></div>
933 <p>
934         All the collections in Boost.PolyCollection use the following exceptions
935         (and only these) to signal various run-time problems with contained types:
936       </p>
937 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
938
939 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
940
941 <span class="keyword">struct</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_unregistered_type" title="Class unregistered_type">unregistered_type</a><span class="special">;</span>
942 <span class="keyword">struct</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_copy_constructible" title="Class not_copy_constructible">not_copy_constructible</a><span class="special">;</span>
943 <span class="keyword">struct</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_equality_comparable" title="Class not_equality_comparable">not_equality_comparable</a><span class="special">;</span>
944
945 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
946
947 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
948 </pre>
949 <div class="section">
950 <div class="titlepage"><div><div><h4 class="title">
951 <a name="poly_collection.reference.header_boost_poly_collection_exc.class_unregistered_type"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_unregistered_type" title="Class unregistered_type">Class
952         <code class="computeroutput"><span class="identifier">unregistered_type</span></code></a>
953 </h4></div></div></div>
954 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">unregistered_type</span><span class="special">:</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span>
955 <span class="special">{</span>
956   <span class="identifier">unregistered_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
957
958   <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">*</span> <span class="identifier">pinfo</span><span class="special">;</span>
959 <span class="special">};</span>
960 </pre>
961 <p>
962           <code class="computeroutput"><span class="identifier">unregistered_type</span></code> is thrown
963           when an operation is requested on a type which does not yet have an associated
964           segment.
965         </p>
966 <p>
967           <code class="computeroutput"><span class="identifier">unregistered_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span></code>
968         </p>
969 <p>
970           <span class="bold"><strong>Effects:</strong></span> Constructs an <code class="computeroutput"><span class="identifier">unregistered_type</span></code>
971           object with the specified type information.
972         </p>
973 </div>
974 <div class="section">
975 <div class="titlepage"><div><div><h4 class="title">
976 <a name="poly_collection.reference.header_boost_poly_collection_exc.class_not_copy_constructible"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_copy_constructible" title="Class not_copy_constructible">Class
977         <code class="computeroutput"><span class="identifier">not_copy_constructible</span></code></a>
978 </h4></div></div></div>
979 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">not_copy_constructible</span><span class="special">:</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span>
980 <span class="special">{</span>
981   <span class="identifier">not_copy_constructible</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
982
983   <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">*</span> <span class="identifier">pinfo</span><span class="special">;</span>
984 <span class="special">};</span>
985 </pre>
986 <p>
987           <code class="computeroutput"><span class="identifier">not_copy_constructible</span></code>
988           is thrown when a copy operation is tried that involves a non-<a href="http://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></strong></span></a>
989           type.
990         </p>
991 <p>
992           <code class="computeroutput"><span class="identifier">not_copy_constructible</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span>
993           <span class="identifier">info</span><span class="special">);</span></code>
994         </p>
995 <p>
996           <span class="bold"><strong>Effects:</strong></span> Constructs a <code class="computeroutput"><span class="identifier">not_copy_constructible</span></code>
997           object with the specified type information.
998         </p>
999 </div>
1000 <div class="section">
1001 <div class="titlepage"><div><div><h4 class="title">
1002 <a name="poly_collection.reference.header_boost_poly_collection_exc.class_not_equality_comparable"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_exc.class_not_equality_comparable" title="Class not_equality_comparable">Class
1003         <code class="computeroutput"><span class="identifier">not_equality_comparable</span></code></a>
1004 </h4></div></div></div>
1005 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">not_equality_comparable</span><span class="special">:</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span>
1006 <span class="special">{</span>
1007   <span class="identifier">not_equality_comparable</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1008
1009   <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">*</span> <span class="identifier">pinfo</span><span class="special">;</span>
1010 <span class="special">};</span>
1011 </pre>
1012 <p>
1013           <code class="computeroutput"><span class="identifier">not_equality_comparable</span></code>
1014           is thrown when comparing two collections for (in)equality involves a non-<a href="http://en.cppreference.com/w/cpp/named_req/EqualityComparable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></strong></span></a>
1015           type.
1016         </p>
1017 <p>
1018           <code class="computeroutput"><span class="identifier">not_equality_comparable</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span>
1019           <span class="identifier">info</span><span class="special">);</span></code>
1020         </p>
1021 <p>
1022           <span class="bold"><strong>Effects:</strong></span> Constructs a <code class="computeroutput"><span class="identifier">not_equality_comparable</span></code>
1023           object with the specified type information.
1024         </p>
1025 </div>
1026 </div>
1027 <div class="section">
1028 <div class="titlepage"><div><div><h3 class="title">
1029 <a name="poly_collection.reference.header_boost_poly_collection_bas"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_bas" title='Header "boost/poly_collection/base_collection_fwd.hpp" synopsis'>Header
1030       <code class="computeroutput"><span class="string">"boost/poly_collection/base_collection_fwd.hpp"</span></code>
1031       synopsis</a>
1032 </h3></div></div></div>
1033 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
1034
1035 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1036
1037 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1038
1039 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;&gt;</span>
1040 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection" title="Class template base_collection"><code class="computeroutput"><span class="identifier">base_collection</span></code></a><span class="special">;</span>
1041
1042 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1043 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1044   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1045   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1046
1047 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1048 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1049   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1050   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1051
1052 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1053 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1054   <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1055
1056 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1057
1058 <span class="keyword">using</span> <span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">base_collection</span><span class="special">;</span>
1059
1060 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1061 </pre>
1062 <p>
1063         Forward declares the class template <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection" title="Class template base_collection"><code class="computeroutput"><span class="identifier">base_collection</span></code></a> and specifies its
1064         default template arguments. Forward declares associated free functions and
1065         brings <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">base_collection</span></code> to the <code class="computeroutput"><span class="identifier">boost</span></code>
1066         namespace.
1067       </p>
1068 </div>
1069 <div class="section">
1070 <div class="titlepage"><div><div><h3 class="title">
1071 <a name="poly_collection.reference.header_boost_poly_collection_ba0"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0" title='Header "boost/poly_collection/base_collection.hpp" synopsis'>Header
1072       <code class="computeroutput"><span class="string">"boost/poly_collection/base_collection.hpp"</span></code>
1073       synopsis</a>
1074 </h3></div></div></div>
1075 <div class="toc"><dl class="toc"><dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection">Class
1076         template <code class="computeroutput"><span class="identifier">base_collection</span></code></a></span></dt></dl></div>
1077 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">poly_collection</span><span class="special">/</span><span class="identifier">base_collection_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1078
1079 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1080
1081 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1082
1083 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1084 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection" title="Class template base_collection"><code class="computeroutput"><span class="identifier">base_collection</span></code></a><span class="special">;</span>
1085
1086 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1087 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1088   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1089   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1090
1091 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1092 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1093   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1094   <span class="keyword">const</span> <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1095
1096 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1097 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1098   <span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1099
1100 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1101
1102 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1103 </pre>
1104 <div class="section">
1105 <div class="titlepage"><div><div><h4 class="title">
1106 <a name="poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_ba0.class_template_base_collection" title="Class template base_collection">Class
1107         template <code class="computeroutput"><span class="identifier">base_collection</span></code></a>
1108 </h4></div></div></div>
1109 <p>
1110           <code class="computeroutput"><span class="identifier">base_collection</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1111           is a <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections" title="Polymorphic collections"><span class="bold"><strong><code class="computeroutput"><span class="identifier">PolymorphicCollection</span></code></strong></span></a>
1112           associated to the classic base/derived <a class="link" href="reference.html#poly_collection.reference.polymorphism_models" title="Polymorphism models">polymorphism
1113           model</a>:
1114         </p>
1115 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1116 <li class="listitem">
1117               <span class="bold"><strong>Interface</strong></span> = { <code class="computeroutput"><span class="identifier">Base</span></code>
1118               : <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_polymorphic_v</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span></code>
1119               }.
1120             </li>
1121 <li class="listitem">
1122               <span class="bold"><strong>Implementation</strong></span>(<code class="computeroutput"><span class="identifier">Base</span></code>)
1123               = { <code class="computeroutput"><span class="identifier">Derived</span></code> : <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_base_of_v</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">&gt;</span></code>
1124               }.
1125             </li>
1126 <li class="listitem">
1127               <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>)
1128               = <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">Derived</span><span class="special">&amp;&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
1129               with <code class="computeroutput"><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">x</span><span class="special">)==</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span></code>.
1130             </li>
1131 </ul></div>
1132 <pre class="programlisting"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1133 <span class="keyword">class</span> <code class="computeroutput"><span class="identifier">base_collection</span></code>
1134 <span class="special">{</span>
1135 <span class="keyword">public</span><span class="special">:</span>
1136   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types" title="Types"><span class="emphasis"><em>// types:</em></span></a>
1137
1138   <span class="keyword">using</span> <span class="identifier">value_type</span><span class="special">=</span><code class="computeroutput"><span class="identifier">Base</span></code><span class="special">;</span>
1139   <span class="keyword">using</span> <span class="identifier">allocator_type</span><span class="special">=</span><span class="identifier">Allocator</span><span class="special">;</span>
1140   <span class="keyword">using</span> <span class="identifier">size_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">;</span>
1141   <span class="keyword">using</span> <span class="identifier">difference_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span><span class="special">;</span>
1142   <span class="keyword">using</span> <span class="identifier">reference</span><span class="special">=</span><span class="identifier">value_type</span><span class="special">&amp;;</span>
1143   <span class="keyword">using</span> <span class="identifier">const_reference</span><span class="special">=</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;;</span>
1144   <span class="keyword">using</span> <span class="identifier">pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">pointer</span><span class="special">;</span>
1145   <span class="keyword">using</span> <span class="identifier">const_pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">const_pointer</span><span class="special">;</span>
1146   <span class="keyword">using</span> <span class="identifier">iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1147   <span class="keyword">using</span> <span class="identifier">const_iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1148   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_base_iterator"><code class="computeroutput"><span class="identifier">local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1149   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_base_iterator"><code class="computeroutput"><span class="identifier">const_local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1150   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_iterator"><code class="computeroutput"><span class="identifier">local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1151   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_iterator"><code class="computeroutput"><span class="identifier">const_local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1152   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info"><code class="computeroutput"><span class="identifier">const_base_segment_info</span></code></a><span class="special">;</span>
1153   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info"><code class="computeroutput"><span class="identifier">base_segment_info</span></code></a><span class="special">;</span>
1154   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_info"><code class="computeroutput"><span class="identifier">const_segment_info</span></code></a><span class="special">;</span>
1155   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_info"><code class="computeroutput"><span class="identifier">segment_info</span></code></a><span class="special">;</span>
1156   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info_iterator"><code class="computeroutput"><span class="identifier">base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1157   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info_iterator"><code class="computeroutput"><span class="identifier">const_base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1158   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_traversal_info"><code class="computeroutput"><span class="identifier">const_segment_traversal_info</span></code></a><span class="special">;</span>
1159   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_traversal_info"><code class="computeroutput"><span class="identifier">segment_traversal_info</span></code></a><span class="special">;</span>
1160
1161   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy" title="Construct/copy/destroy"><span class="emphasis"><em>// construct/destroy/copy:</em></span></a>
1162
1163   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">();</span>
1164   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;);</span>
1165   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;&amp;);</span>
1166   <span class="keyword">explicit</span> <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">(</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1167   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1168   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1169   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1170   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy.range_construction"><code class="computeroutput"><span class="identifier">base_collection</span></code></a><span class="special">(</span>
1171     <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span>
1172     <span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">=</span><span class="identifier">allocator_type</span><span class="special">{});</span>
1173
1174   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;);</span>
1175   <code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;&amp;);</span>
1176
1177   <span class="identifier">allocator_type</span> <span class="identifier">get_allocator</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1178
1179   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration" title="Type registration"><span class="emphasis"><em>// type registration:</em></span></a>
1180
1181   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">T</span><span class="special">&gt;</span>
1182   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.register_types"><code class="computeroutput"><span class="identifier">register_types</span></code></a><span class="special">();</span>
1183
1184   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1185   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1186
1187   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators" title="Iterators"><span class="emphasis"><em>// iterators:</em></span></a>
1188
1189   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1190   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1191   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1192   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1193   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1194   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1195
1196   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1197   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1198   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1199   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1200   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1201   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1202
1203   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">();</span>
1204   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">();</span>
1205   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1206   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1207   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1208   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1209
1210   <span class="identifier">base_segment_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1211   <span class="identifier">const_base_segment_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1212   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">();</span>
1213   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1214
1215   <span class="identifier">segment_traversal_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1216   <span class="identifier">const_segment_traversal_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1217
1218   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity" title="Capacity"><span class="emphasis"><em>// capacity:</em></span></a>
1219
1220   <span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1221   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1222   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1223
1224   <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1225   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1226   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1227
1228   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1229   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1230
1231   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1232   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1233
1234   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1235   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">,</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1236   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span><span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1237
1238   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1239   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1240   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1241
1242   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers" title="Modifiers"><span class="emphasis"><em>// modifiers:</em></span></a>
1243
1244   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1245   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace</span></code></a><span class="special">(</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1246
1247   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1248   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace_hint</span></code></a><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1249
1250   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">LocalIterator</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1251   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace_pos"><code class="computeroutput"><span class="identifier">emplace_pos</span></code></a><span class="special">(</span><span class="identifier">LocalIterator</span> <span class="identifier">pos</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1252
1253   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1254   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1255
1256   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1257   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1258
1259   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1260   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1261
1262   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1263   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_hint_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1264
1265   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1266   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">pos</span><span class="special">);</span>
1267
1268   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1269   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">CollectionIterator</span> <span class="identifier">last</span><span class="special">);</span>
1270
1271   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1272   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1273   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">();</span>
1274
1275   <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><code class="computeroutput"><span class="identifier">base_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1276 <span class="special">};</span>
1277 </pre>
1278 </div>
1279 </div>
1280 <div class="section">
1281 <div class="titlepage"><div><div><h3 class="title">
1282 <a name="poly_collection.reference.header_boost_poly_collection_fun"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fun" title='Header "boost/poly_collection/function_collection_fwd.hpp" synopsis'>Header
1283       <code class="computeroutput"><span class="string">"boost/poly_collection/function_collection_fwd.hpp"</span></code>
1284       synopsis</a>
1285 </h3></div></div></div>
1286 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
1287
1288 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1289
1290 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1291
1292 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">&gt;</span>
1293 <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type"><code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1294
1295 <span class="keyword">template</span><span class="special">&lt;</span>
1296   <span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span>
1297   <span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">function_collection_value_type</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">&gt;&gt;</span>
1298 <span class="special">&gt;</span>
1299 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti" title="Class template function_collection"><code class="computeroutput"><span class="identifier">function_collection</span></code></a><span class="special">;</span>
1300
1301 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1302 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1303   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1304   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1305
1306 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1307 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1308   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1309   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1310
1311 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1312 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1313   <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1314   <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1315
1316 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1317
1318 <span class="keyword">using</span> <span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">function_collection</span><span class="special">;</span>
1319
1320 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1321 </pre>
1322 <p>
1323         Defines the alias template <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type"><code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a> (the
1324         actual type it refers to, though, is merely forward declared). Forward declares
1325         the class template <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti" title="Class template function_collection"><code class="computeroutput"><span class="identifier">function_collection</span></code></a> and specifies
1326         its default template arguments. Forward declares associated free functions
1327         and brings <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">function_collection</span></code> to the <code class="computeroutput"><span class="identifier">boost</span></code> namespace.
1328       </p>
1329 </div>
1330 <div class="section">
1331 <div class="titlepage"><div><div><h3 class="title">
1332 <a name="poly_collection.reference.header_boost_poly_collection_fu0"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0" title='Header "boost/poly_collection/function_collection.hpp" synopsis'>Header
1333       <code class="computeroutput"><span class="string">"boost/poly_collection/function_collection.hpp"</span></code>
1334       synopsis</a>
1335 </h3></div></div></div>
1336 <div class="toc"><dl class="toc">
1337 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti">Alias
1338         template <code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a></span></dt>
1339 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti">Class
1340         template <code class="computeroutput"><span class="identifier">function_collection</span></code></a></span></dt>
1341 </dl></div>
1342 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">poly_collection</span><span class="special">/</span><span class="identifier">function_collection_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1343
1344 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1345
1346 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1347
1348 <span class="comment">// defines the type <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type"><code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a> refers to</span>
1349
1350 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1351 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti" title="Class template function_collection"><code class="computeroutput"><span class="identifier">function_collection</span></code></a><span class="special">;</span>
1352
1353 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1354 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1355   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1356   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1357
1358 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1359 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1360   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1361   <span class="keyword">const</span> <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1362
1363 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1364 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1365   <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1366   <span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1367
1368 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1369
1370 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1371 </pre>
1372 <div class="section">
1373 <div class="titlepage"><div><div><h4 class="title">
1374 <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type">Alias
1375         template <code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a>
1376 </h4></div></div></div>
1377 <p>
1378           <code class="computeroutput"><span class="identifier">function_collection_value_type</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">&gt;</span></code> is the <code class="computeroutput"><span class="identifier">value_type</span></code>
1379           of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>,
1380           where <code class="computeroutput"><span class="identifier">Signature</span></code> must be
1381           a type of the form <code class="computeroutput"><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span></code>.
1382           <code class="computeroutput"><span class="identifier">function_collection_value_type</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">&gt;</span></code> wraps a reference to an object modeling
1383           <a href="http://en.cppreference.com/w/cpp/named_req/Callable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">Callable</span></code></strong></span></a>
1384           for the given <code class="computeroutput"><span class="identifier">Signature</span></code>.
1385           The interface provided partially replicates that of <a href="http://en.cppreference.com/w/cpp/utility/functional/function" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">function</span></code></a> and adds some extra
1386           facilities.
1387         </p>
1388 <p>
1389           In what follows, the name <span class="emphasis"><em><code class="computeroutput"><span class="identifier">function_collection_value_type_impl</span></code></em></span>
1390           is used just for explanatory purposes in place of the actual class template
1391           name, which is implementation defined.
1392         </p>
1393 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">&gt;</span>
1394 <span class="keyword">using</span> <span class="identifier">function_collection_value_type</span><span class="special">=</span>
1395   <span class="emphasis"><em>function_collection_value_type_impl</em></span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">&gt;;</span>
1396
1397 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">&gt;</span>
1398 <span class="keyword">class</span> <span class="emphasis"><em>function_collection_value_type_impl</em></span><span class="special">;</span>
1399
1400 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1401 <span class="keyword">class</span> <span class="emphasis"><em>function_collection_value_type_impl</em></span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)&gt;</span>
1402 <span class="special">{</span>
1403 <span class="keyword">public</span><span class="special">:</span>
1404   <span class="keyword">explicit</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_bool">operator bool</a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1405
1406   <span class="identifier">R</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_call">operator()</a><span class="special">(</span><span class="identifier">Args</span><span class="special">...</span> <span class="identifier">args</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1407
1408   <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.target_type">target_type</a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1409   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.target">target</a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1410   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">*</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.target">target</a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1411
1412   <span class="keyword">operator</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_std_function">std::function&lt;R(Args...)&gt;</a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1413
1414   <span class="keyword">void</span><span class="special">*</span>       <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.data">data</a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1415   <span class="keyword">const</span> <span class="keyword">void</span><span class="special">*</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.data">data</a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1416 <span class="special">};</span>
1417 </pre>
1418 <p>
1419           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_bool"></a><code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span>
1420           <span class="keyword">bool</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
1421         </p>
1422 <p>
1423           <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">true</span></code>.
1424         </p>
1425 <p>
1426           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_call"></a><code class="computeroutput"><span class="identifier">R</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Args</span><span class="special">...</span> <span class="identifier">args</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span></code>
1427         </p>
1428 <p>
1429           <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><a href="http://en.cppreference.com/w/cpp/utility/functional/invoke" target="_top"><span class="emphasis"><em><span class="bold"><strong><code class="computeroutput"><span class="identifier">INVOKE</span></code></strong></span></em></span></a><span class="special">(</span><span class="identifier">f</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...,</span><span class="identifier">R</span><span class="special">)</span></code>, where
1430           f is the wrapped callable object.<br> <span class="bold"><strong>Returns:</strong></span>
1431           Nothing if <code class="computeroutput"><span class="identifier">R</span></code> is <code class="computeroutput"><span class="keyword">void</span></code>, otherwise the return value of <code class="computeroutput"><a href="http://en.cppreference.com/w/cpp/utility/functional/invoke" target="_top"><span class="emphasis"><em><span class="bold"><strong><code class="computeroutput"><span class="identifier">INVOKE</span></code></strong></span></em></span></a><span class="special">(</span><span class="identifier">f</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...,</span><span class="identifier">R</span><span class="special">)</span></code>.
1432         </p>
1433 <p>
1434           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.target_type"></a><code class="computeroutput"><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">target_type</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
1435         </p>
1436 <p>
1437           <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>
1438           where <code class="computeroutput"><span class="identifier">T</span></code> is the type of
1439           the wrapped callable object.
1440         </p>
1441 <p>
1442           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.target"></a><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">target</span><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span></code><br> <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">target</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
1443         </p>
1444 <p>
1445           <span class="bold"><strong>Returns:</strong></span> If <code class="computeroutput"><span class="identifier">target_type</span><span class="special">()==</span><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>
1446           a pointer to the wrapped callable object, otherwise <code class="computeroutput"><span class="keyword">nullptr</span></code>.
1447         </p>
1448 <p>
1449           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.operator_std_function"></a><code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)&gt;()</span><span class="keyword">const</span>
1450           <span class="keyword">noexcept</span><span class="special">;</span></code>
1451         </p>
1452 <p>
1453           <span class="bold"><strong>Returns:</strong></span> A <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)&gt;</span></code> object holding a reference to the
1454           wrapped callable object.
1455         </p>
1456 <p>
1457           <a name="poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti.data"></a><code class="computeroutput"><span class="keyword">void</span><span class="special">*</span> <span class="identifier">data</span><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span></code><br> <code class="computeroutput"><span class="keyword">const</span>
1458           <span class="keyword">void</span><span class="special">*</span>
1459           <span class="identifier">data</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
1460         </p>
1461 <p>
1462           <span class="bold"><strong>Returns:</strong></span> The address of the wrapped callable
1463           object.
1464         </p>
1465 </div>
1466 <div class="section">
1467 <div class="titlepage"><div><div><h4 class="title">
1468 <a name="poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.class_template_function_collecti" title="Class template function_collection">Class
1469         template <code class="computeroutput"><span class="identifier">function_collection</span></code></a>
1470 </h4></div></div></div>
1471 <p>
1472           <code class="computeroutput"><span class="identifier">function_collection</span><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1473           is a <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections" title="Polymorphic collections"><span class="bold"><strong><code class="computeroutput"><span class="identifier">PolymorphicCollection</span></code></strong></span></a>
1474           associated to a dynamic <a class="link" href="reference.html#poly_collection.reference.polymorphism_models" title="Polymorphism models">polymorphism
1475           model</a> based on call signature compatibility:
1476         </p>
1477 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1478 <li class="listitem">
1479               <span class="bold"><strong>Interface</strong></span> = { <code class="computeroutput"><span class="identifier">Signature</span></code>
1480               : <code class="computeroutput"><span class="identifier">Signature</span></code> = <code class="computeroutput"><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span></code>
1481               }.
1482             </li>
1483 <li class="listitem">
1484               <span class="bold"><strong>Implementation</strong></span>(<code class="computeroutput"><span class="identifier">Signature</span></code>)
1485               = { <code class="computeroutput"><span class="identifier">Callable</span></code> : <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_invocable_r_v</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">,</span><span class="identifier">Callable</span><span class="special">,</span><span class="identifier">Args</span><span class="special">...&gt;</span></code>
1486               }.
1487             </li>
1488 <li class="listitem">
1489               <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>)
1490               =<br> <code class="computeroutput"><span class="identifier">x</span><span class="special">.</span><span class="identifier">target</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</span></code>
1491               with <code class="computeroutput"><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">)==</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">target_type</span><span class="special">()</span></code>,
1492               if <code class="computeroutput"><span class="identifier">x</span></code> is an instantiation
1493               of <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type"><code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a>,<br>
1494               <code class="computeroutput"><span class="identifier">x</span></code>, otherwise.
1495             </li>
1496 </ul></div>
1497 <pre class="programlisting"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Signature</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1498 <span class="keyword">class</span> <code class="computeroutput"><span class="identifier">function_collection</span></code>
1499 <span class="special">{</span>
1500 <span class="keyword">public</span><span class="special">:</span>
1501   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types" title="Types"><span class="emphasis"><em>// types:</em></span></a>
1502
1503   <span class="keyword">using</span> <span class="identifier">value_type</span><span class="special">=</span><code class="computeroutput"><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_fu0.alias_template_function_collecti" title="Alias template function_collection_value_type"><code class="computeroutput"><span class="identifier">function_collection_value_type</span></code></a><span class="special">&lt;</span><span class="identifier">Signature</span><span class="special">&gt;</span></code><span class="special">;</span>
1504   <span class="keyword">using</span> <span class="identifier">allocator_type</span><span class="special">=</span><span class="identifier">Allocator</span><span class="special">;</span>
1505   <span class="keyword">using</span> <span class="identifier">size_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">;</span>
1506   <span class="keyword">using</span> <span class="identifier">difference_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span><span class="special">;</span>
1507   <span class="keyword">using</span> <span class="identifier">reference</span><span class="special">=</span><span class="identifier">value_type</span><span class="special">&amp;;</span>
1508   <span class="keyword">using</span> <span class="identifier">const_reference</span><span class="special">=</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;;</span>
1509   <span class="keyword">using</span> <span class="identifier">pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">pointer</span><span class="special">;</span>
1510   <span class="keyword">using</span> <span class="identifier">const_pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">const_pointer</span><span class="special">;</span>
1511   <span class="keyword">using</span> <span class="identifier">iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1512   <span class="keyword">using</span> <span class="identifier">const_iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1513   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_base_iterator"><code class="computeroutput"><span class="identifier">local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1514   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_base_iterator"><code class="computeroutput"><span class="identifier">const_local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1515   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_iterator"><code class="computeroutput"><span class="identifier">local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1516   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_iterator"><code class="computeroutput"><span class="identifier">const_local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1517   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info"><code class="computeroutput"><span class="identifier">const_base_segment_info</span></code></a><span class="special">;</span>
1518   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info"><code class="computeroutput"><span class="identifier">base_segment_info</span></code></a><span class="special">;</span>
1519   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_info"><code class="computeroutput"><span class="identifier">const_segment_info</span></code></a><span class="special">;</span>
1520   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_info"><code class="computeroutput"><span class="identifier">segment_info</span></code></a><span class="special">;</span>
1521   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info_iterator"><code class="computeroutput"><span class="identifier">base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1522   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info_iterator"><code class="computeroutput"><span class="identifier">const_base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1523   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_traversal_info"><code class="computeroutput"><span class="identifier">const_segment_traversal_info</span></code></a><span class="special">;</span>
1524   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_traversal_info"><code class="computeroutput"><span class="identifier">segment_traversal_info</span></code></a><span class="special">;</span>
1525
1526   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy" title="Construct/copy/destroy"><span class="emphasis"><em>// construct/destroy/copy:</em></span></a>
1527
1528   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">();</span>
1529   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;);</span>
1530   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;&amp;);</span>
1531   <span class="keyword">explicit</span> <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">(</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1532   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1533   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1534   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1535   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy.range_construction"><code class="computeroutput"><span class="identifier">function_collection</span></code></a><span class="special">(</span>
1536     <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span>
1537     <span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">=</span><span class="identifier">allocator_type</span><span class="special">{});</span>
1538
1539   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;);</span>
1540   <code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;&amp;);</span>
1541
1542   <span class="identifier">allocator_type</span> <span class="identifier">get_allocator</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1543
1544   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration" title="Type registration"><span class="emphasis"><em>// type registration:</em></span></a>
1545
1546   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">T</span><span class="special">&gt;</span>
1547   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.register_types"><code class="computeroutput"><span class="identifier">register_types</span></code></a><span class="special">();</span>
1548
1549   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1550   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1551
1552   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators" title="Iterators"><span class="emphasis"><em>// iterators:</em></span></a>
1553
1554   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1555   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1556   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1557   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1558   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1559   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1560
1561   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1562   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1563   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1564   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1565   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1566   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1567
1568   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">();</span>
1569   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">();</span>
1570   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1571   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1572   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1573   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1574
1575   <span class="identifier">base_segment_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1576   <span class="identifier">const_base_segment_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1577   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">();</span>
1578   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1579
1580   <span class="identifier">segment_traversal_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1581   <span class="identifier">const_segment_traversal_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1582
1583   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity" title="Capacity"><span class="emphasis"><em>// capacity:</em></span></a>
1584
1585   <span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1586   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1587   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1588
1589   <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1590   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1591   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1592
1593   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1594   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1595
1596   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1597   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1598
1599   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1600   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">,</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1601   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span><span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1602
1603   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1604   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1605   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1606
1607   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers" title="Modifiers"><span class="emphasis"><em>// modifiers:</em></span></a>
1608
1609   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1610   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace</span></code></a><span class="special">(</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1611
1612   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1613   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace_hint</span></code></a><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1614
1615   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">LocalIterator</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1616   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace_pos"><code class="computeroutput"><span class="identifier">emplace_pos</span></code></a><span class="special">(</span><span class="identifier">LocalIterator</span> <span class="identifier">pos</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1617
1618   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1619   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1620
1621   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1622   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1623
1624   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1625   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1626
1627   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1628   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_hint_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1629
1630   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1631   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">pos</span><span class="special">);</span>
1632
1633   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1634   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">CollectionIterator</span> <span class="identifier">last</span><span class="special">);</span>
1635
1636   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1637   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1638   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">();</span>
1639
1640   <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><code class="computeroutput"><span class="identifier">function_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1641 <span class="special">};</span>
1642 </pre>
1643 </div>
1644 </div>
1645 <div class="section">
1646 <div class="titlepage"><div><div><h3 class="title">
1647 <a name="poly_collection.reference.header_boost_poly_collection_any"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_any" title='Header "boost/poly_collection/any_collection_fwd.hpp" synopsis'>Header
1648       <code class="computeroutput"><span class="string">"boost/poly_collection/any_collection_fwd.hpp"</span></code>
1649       synopsis</a>
1650 </h3></div></div></div>
1651 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
1652
1653 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1654
1655 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1656
1657 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">&gt;</span>
1658 <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va" title="Alias template any_collection_value_type"><code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1659
1660 <span class="keyword">template</span><span class="special">&lt;</span>
1661   <span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span>
1662   <span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">any_collection_value_type</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">&gt;&gt;</span>
1663 <span class="special">&gt;</span>
1664 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection" title="Class template any_collection"><code class="computeroutput"><span class="identifier">any_collection</span></code></a><span class="special">;</span>
1665
1666 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1667 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1668   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1669   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1670
1671 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1672 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1673   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1674   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1675
1676 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1677 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1678   <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1679
1680 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1681
1682 <span class="keyword">using</span> <span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">any_collection</span><span class="special">;</span>
1683
1684 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1685 </pre>
1686 <p>
1687         Defines the alias template <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va" title="Alias template any_collection_value_type"><code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a> (the actual
1688         type it refers to, though, is merely forward declared). Forward declares
1689         the class template <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection" title="Class template any_collection"><code class="computeroutput"><span class="identifier">any_collection</span></code></a> and specifies its
1690         default template arguments. Forward declares associated free functions and
1691         brings <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">poly_collection</span><span class="special">::</span><span class="identifier">any_collection</span></code> to the <code class="computeroutput"><span class="identifier">boost</span></code>
1692         namespace.
1693       </p>
1694 </div>
1695 <div class="section">
1696 <div class="titlepage"><div><div><h3 class="title">
1697 <a name="poly_collection.reference.header_boost_poly_collection_an0"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0" title='Header "boost/poly_collection/any_collection.hpp" synopsis'>Header
1698       <code class="computeroutput"><span class="string">"boost/poly_collection/any_collection.hpp"</span></code>
1699       synopsis</a>
1700 </h3></div></div></div>
1701 <div class="toc"><dl class="toc">
1702 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va">Alias
1703         template <code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a></span></dt>
1704 <dt><span class="section"><a href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection">Class
1705         template <code class="computeroutput"><span class="identifier">any_collection</span></code></a></span></dt>
1706 </dl></div>
1707 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">poly_collection</span><span class="special">/</span><span class="identifier">any_collection_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1708
1709 <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1710
1711 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1712
1713 <span class="comment">// defines the type <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va" title="Alias template any_collection_value_type"><code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a> refers to</span>
1714
1715 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1716 <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection" title="Class template any_collection"><code class="computeroutput"><span class="identifier">any_collection</span></code></a><span class="special">;</span>
1717
1718 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1719 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span>
1720   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1721   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1722
1723 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1724 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span>
1725   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span>
1726   <span class="keyword">const</span> <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1727
1728 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1729 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span>
1730   <span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span><span class="special">);</span>
1731
1732 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
1733
1734 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
1735 </pre>
1736 <div class="section">
1737 <div class="titlepage"><div><div><h4 class="title">
1738 <a name="poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va" title="Alias template any_collection_value_type">Alias
1739         template <code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a>
1740 </h4></div></div></div>
1741 <p>
1742           <code class="computeroutput"><span class="identifier">any_collection_value_type</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">&gt;</span></code> is the <code class="computeroutput"><span class="identifier">value_type</span></code>
1743           of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>,
1744           where <code class="computeroutput"><span class="identifier">Concept</span></code> is defined
1745           according to the <a href="../../../doc/html/boost_typeerasure/conceptdef.html" target="_top">requisites</a>
1746           of <a href="../../../libs/type_erasure" target="_top">Boost.TypeErasure</a> using
1747           <a href="../../../doc/html/boost/type_erasure/_self.html" target="_top"><code class="computeroutput"><span class="identifier">_self</span></code></a> as its <a href="../../../doc/html/boost/type_erasure/placeholder.html" target="_top">placeholder</a>.
1748           The alias template definition has the form
1749         </p>
1750 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">&gt;</span>
1751 <span class="keyword">using</span> <span class="identifier">any_collection_value_type</span><span class="special">=</span>
1752   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><a href="../../../doc/html/boost/type_erasure/any.html" target="_top">any</a><span class="special">&lt;</span><span class="identifier">Concept2</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span><span class="identifier">_self</span><span class="special">&amp;&gt;;</span>
1753 </pre>
1754 <p>
1755           with <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span></code><a href="../../../doc/html/boost/type_erasure/is_subconcept.html" target="_top"><code class="computeroutput"><span class="identifier">is_subconcept</span></code></a><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Concept2</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">==</span><span class="keyword">true</span></code>. The exact definition of <code class="computeroutput"><span class="identifier">Concept2</span></code> is implementation defined.
1756         </p>
1757 </div>
1758 <div class="section">
1759 <div class="titlepage"><div><div><h4 class="title">
1760 <a name="poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.class_template_any_collection" title="Class template any_collection">Class
1761         template <code class="computeroutput"><span class="identifier">any_collection</span></code></a>
1762 </h4></div></div></div>
1763 <p>
1764           <code class="computeroutput"><span class="identifier">any_collection</span><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">,</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1765           is a <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections" title="Polymorphic collections"><span class="bold"><strong><code class="computeroutput"><span class="identifier">PolymorphicCollection</span></code></strong></span></a>
1766           associated to a dynamic <a class="link" href="reference.html#poly_collection.reference.polymorphism_models" title="Polymorphism models">polymorphism
1767           model</a> based on <a href="https://en.wikipedia.org/wiki/Duck_typing" target="_top"><span class="emphasis"><em>duck
1768           typing</em></span></a> as implemented by <a href="../../../libs/type_erasure" target="_top">Boost.TypeErasure</a>:
1769         </p>
1770 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1771 <li class="listitem">
1772               <span class="bold"><strong>Interface</strong></span> = { <code class="computeroutput"><span class="identifier">Concept</span></code>
1773               : as <a href="../../../doc/html/boost_typeerasure/conceptdef.html" target="_top">specified</a>
1774               by <a href="../../../libs/type_erasure" target="_top">Boost.TypeErasure</a>,
1775               using the <a href="../../../doc/html/boost/type_erasure/_self.html" target="_top"><code class="computeroutput"><span class="identifier">_self</span></code></a> <a href="../../../doc/html/boost/type_erasure/placeholder.html" target="_top">placeholder</a>
1776               }.
1777             </li>
1778 <li class="listitem">
1779               <span class="bold"><strong>Implementation</strong></span>(<code class="computeroutput"><span class="identifier">Concept</span></code>)
1780               = { <code class="computeroutput"><span class="identifier">Concrete</span></code> : <code class="computeroutput"><span class="identifier">Concrete</span></code> satisfies <code class="computeroutput"><span class="identifier">Concept</span></code> }.
1781             </li>
1782 <li class="listitem">
1783               <span class="bold"><strong>subobject</strong></span>(<code class="computeroutput"><span class="identifier">x</span></code>)
1784               =<br> <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span></code><a href="../../../doc/html/boost/type_erasure/any_cast.html" target="_top"><code class="computeroutput"><span class="identifier">any_cast</span></code></a><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
1785               with <code class="computeroutput"><span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">)==</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span></code><a href="../../../doc/html/boost/type_erasure/typeid_of.html" target="_top"><code class="computeroutput"><span class="identifier">typeid_of</span></code></a><code class="computeroutput"><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>,
1786               if <code class="computeroutput"><span class="identifier">x</span></code> is an instantiation
1787               of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">type_erasure</span><span class="special">::</span></code><a href="../../../doc/html/boost/type_erasure/any.html" target="_top"><code class="computeroutput"><span class="identifier">any</span></code></a>
1788               including <a href="../../../doc/html/boost/type_erasure/typeid_.html" target="_top"><code class="computeroutput"><span class="identifier">typeid_</span></code></a><code class="computeroutput"><span class="special">&lt;&gt;</span></code>,<br>
1789               <code class="computeroutput"><span class="identifier">x</span></code>, otherwise.
1790             </li>
1791 </ul></div>
1792 <pre class="programlisting"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Concept</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">&gt;</span></code>
1793 <span class="keyword">class</span> <code class="computeroutput"><span class="identifier">any_collection</span></code>
1794 <span class="special">{</span>
1795 <span class="keyword">public</span><span class="special">:</span>
1796   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types" title="Types"><span class="emphasis"><em>// types:</em></span></a>
1797
1798   <span class="keyword">using</span> <span class="identifier">value_type</span><span class="special">=</span><code class="computeroutput"><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_an0.alias_template_any_collection_va" title="Alias template any_collection_value_type"><code class="computeroutput"><span class="identifier">any_collection_value_type</span></code></a><span class="special">&lt;</span><span class="identifier">Concept</span><span class="special">&gt;</span></code><span class="special">;</span>
1799   <span class="keyword">using</span> <span class="identifier">allocator_type</span><span class="special">=</span><span class="identifier">Allocator</span><span class="special">;</span>
1800   <span class="keyword">using</span> <span class="identifier">size_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">;</span>
1801   <span class="keyword">using</span> <span class="identifier">difference_type</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span><span class="special">;</span>
1802   <span class="keyword">using</span> <span class="identifier">reference</span><span class="special">=</span><span class="identifier">value_type</span><span class="special">&amp;;</span>
1803   <span class="keyword">using</span> <span class="identifier">const_reference</span><span class="special">=</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;;</span>
1804   <span class="keyword">using</span> <span class="identifier">pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">pointer</span><span class="special">;</span>
1805   <span class="keyword">using</span> <span class="identifier">const_pointer</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="identifier">const_pointer</span><span class="special">;</span>
1806   <span class="keyword">using</span> <span class="identifier">iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1807   <span class="keyword">using</span> <span class="identifier">const_iterator</span><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1808   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_base_iterator"><code class="computeroutput"><span class="identifier">local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1809   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_base_iterator"><code class="computeroutput"><span class="identifier">const_local_base_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1810   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.local_iterator"><code class="computeroutput"><span class="identifier">local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1811   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_local_iterator"><code class="computeroutput"><span class="identifier">const_local_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1812   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info"><code class="computeroutput"><span class="identifier">const_base_segment_info</span></code></a><span class="special">;</span>
1813   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info"><code class="computeroutput"><span class="identifier">base_segment_info</span></code></a><span class="special">;</span>
1814   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_info"><code class="computeroutput"><span class="identifier">const_segment_info</span></code></a><span class="special">;</span>
1815   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_info"><code class="computeroutput"><span class="identifier">segment_info</span></code></a><span class="special">;</span>
1816   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.base_segment_info_iterator"><code class="computeroutput"><span class="identifier">base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1817   <span class="keyword">using</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_base_segment_info_iterator"><code class="computeroutput"><span class="identifier">const_base_segment_info_iterator</span></code></a><span class="special">=</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
1818   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.const_segment_traversal_info"><code class="computeroutput"><span class="identifier">const_segment_traversal_info</span></code></a><span class="special">;</span>
1819   <span class="keyword">class</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.types.segment_traversal_info"><code class="computeroutput"><span class="identifier">segment_traversal_info</span></code></a><span class="special">;</span>
1820
1821   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy" title="Construct/copy/destroy"><span class="emphasis"><em>// construct/destroy/copy:</em></span></a>
1822
1823   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">();</span>
1824   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;);</span>
1825   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;&amp;);</span>
1826   <span class="keyword">explicit</span> <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">(</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1827   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1828   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">(</span><code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">);</span>
1829   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1830   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy.range_construction"><code class="computeroutput"><span class="identifier">any_collection</span></code></a><span class="special">(</span>
1831     <span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span>
1832     <span class="keyword">const</span> <span class="identifier">allocator_type</span><span class="special">&amp;</span> <span class="identifier">al</span><span class="special">=</span><span class="identifier">allocator_type</span><span class="special">{});</span>
1833
1834   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;);</span>
1835   <code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;&amp;);</span>
1836
1837   <span class="identifier">allocator_type</span> <span class="identifier">get_allocator</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1838
1839   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration" title="Type registration"><span class="emphasis"><em>// type registration:</em></span></a>
1840
1841   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">T</span><span class="special">&gt;</span>
1842   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.register_types"><code class="computeroutput"><span class="identifier">register_types</span></code></a><span class="special">();</span>
1843
1844   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1845   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration.is_registered"><code class="computeroutput"><span class="identifier">is_registered</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1846
1847   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators" title="Iterators"><span class="emphasis"><em>// iterators:</em></span></a>
1848
1849   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1850   <span class="identifier">iterator</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1851   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1852   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1853   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1854   <span class="identifier">const_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1855
1856   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1857   <span class="identifier">local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1858   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1859   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1860   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1861   <span class="identifier">const_local_base_iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1862
1863   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">();</span>
1864   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">();</span>
1865   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">begin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1866   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">end</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1867   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.begin"><code class="computeroutput"><span class="identifier">cbegin</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1868   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_local_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.end"><code class="computeroutput"><span class="identifier">cend</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1869
1870   <span class="identifier">base_segment_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1871   <span class="identifier">const_base_segment_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1872   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">();</span>
1873   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_segment_info</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment"><code class="computeroutput"><span class="identifier">segment</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1874
1875   <span class="identifier">segment_traversal_info</span>       <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1876   <span class="identifier">const_segment_traversal_info</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators.segment_traversal"><code class="computeroutput"><span class="identifier">segment_traversal</span></code></a><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1877
1878   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity" title="Capacity"><span class="emphasis"><em>// capacity:</em></span></a>
1879
1880   <span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1881   <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1882   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">bool</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.empty"><code class="computeroutput"><span class="identifier">empty</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1883
1884   <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span><span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
1885   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1886   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1887
1888   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1889   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.max_size"><code class="computeroutput"><span class="identifier">max_size</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1890
1891   <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
1892   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">size_type</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.capacity"><code class="computeroutput"><span class="identifier">capacity</span></code></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
1893
1894   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1895   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">,</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1896   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span><span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.reserve"><code class="computeroutput"><span class="identifier">reserve</span></code></a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">);</span>
1897
1898   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1899   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1900   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity.shrink_to_fit"><code class="computeroutput"><span class="identifier">shrink_to_fit</span></code></a><span class="special">();</span>
1901
1902   <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers" title="Modifiers"><span class="emphasis"><em>// modifiers:</em></span></a>
1903
1904   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1905   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace</span></code></a><span class="special">(</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1906
1907   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1908   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace"><code class="computeroutput"><span class="identifier">emplace_hint</span></code></a><span class="special">(</span><span class="identifier">const_iterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1909
1910   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">LocalIterator</span><span class="special">,</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
1911   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.emplace_pos"><code class="computeroutput"><span class="identifier">emplace_pos</span></code></a><span class="special">(</span><span class="identifier">LocalIterator</span> <span class="identifier">pos</span><span class="special">,</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
1912
1913   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1914   <span class="identifier">iterator</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1915
1916   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1917   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">T</span><span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1918
1919   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1920   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1921
1922   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
1923   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.insert_hint_range"><code class="computeroutput"><span class="identifier">insert</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">hint</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">);</span>
1924
1925   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1926   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">pos</span><span class="special">);</span>
1927
1928   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CollectionIterator</span><span class="special">&gt;</span>
1929   <span class="keyword">auto</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.erase"><code class="computeroutput"><span class="identifier">erase</span></code></a><span class="special">(</span><span class="identifier">CollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">CollectionIterator</span> <span class="identifier">last</span><span class="special">);</span>
1930
1931   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">()</span><span class="keyword">noexcept</span><span class="special">;</span>
1932   <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span><span class="special">&amp;</span> <span class="identifier">info</span><span class="special">);</span>
1933   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.clear"><code class="computeroutput"><span class="identifier">clear</span></code></a><span class="special">();</span>
1934
1935   <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><code class="computeroutput"><span class="identifier">any_collection</span></code><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1936 <span class="special">};</span>
1937 </pre>
1938 </div>
1939 </div>
1940 <div class="section">
1941 <div class="titlepage"><div><div><h3 class="title">
1942 <a name="poly_collection.reference.header_boost_poly_collection_alg"></a><a class="link" href="reference.html#poly_collection.reference.header_boost_poly_collection_alg" title='Header "boost/poly_collection/algorithm.hpp" synopsis'>Header
1943       <code class="computeroutput"><span class="string">"boost/poly_collection/algorithm.hpp"</span></code>
1944       synopsis</a>
1945 </h3></div></div></div>
1946 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span>
1947
1948 <span class="keyword">namespace</span> <span class="identifier">poly_collection</span><span class="special">{</span>
1949
1950 <span class="emphasis"><em><code class="computeroutput"><span class="comment">// non-modifying sequence operations:</span></code></em></span>
1951
1952 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
1953 <span class="keyword">bool</span> <span class="identifier">all_of</span><span class="special">(</span>
1954   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
1955
1956 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
1957 <span class="keyword">bool</span> <span class="identifier">any_of</span><span class="special">(</span>
1958   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
1959
1960 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
1961 <span class="keyword">bool</span> <span class="identifier">none_of</span><span class="special">(</span>
1962   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
1963
1964 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Function</span><span class="special">&gt;</span>
1965 <span class="identifier">Function</span> <span class="identifier">for_each</span><span class="special">(</span>
1966   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Function</span> <span class="identifier">f</span><span class="special">);</span>
1967
1968 <span class="keyword">template</span><span class="special">&lt;</span>
1969   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
1970   <span class="keyword">typename</span> <span class="identifier">Size</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Function</span>
1971 <span class="special">&gt;</span>
1972 <span class="identifier">Iterator</span> <span class="identifier">for_each_n</span><span class="special">(</span>
1973   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">Size</span> <span class="identifier">n</span><span class="special">,</span><span class="identifier">Function</span> <span class="identifier">f</span><span class="special">);</span>
1974
1975 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1976 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find</span><span class="special">(</span>
1977   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
1978
1979 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
1980 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_if</span><span class="special">(</span>
1981   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
1982
1983 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
1984 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_if_not</span><span class="special">(</span>
1985   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
1986
1987 <span class="keyword">template</span><span class="special">&lt;</span>
1988   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span>
1989 <span class="special">&gt;</span>
1990 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_end</span><span class="special">(</span>
1991   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
1992   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">);</span>
1993
1994 <span class="keyword">template</span><span class="special">&lt;</span>
1995   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
1996   <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
1997 <span class="special">&gt;</span>
1998 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_end</span><span class="special">(</span>
1999   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2000   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2001
2002 <span class="keyword">template</span><span class="special">&lt;</span>
2003   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span>
2004 <span class="special">&gt;</span>
2005 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_first_of</span><span class="special">(</span>
2006   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2007   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">);</span>
2008
2009 <span class="keyword">template</span><span class="special">&lt;</span>
2010   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2011   <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2012 <span class="special">&gt;</span>
2013 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">find_first_of</span><span class="special">(</span>
2014   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2015   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2016
2017 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">&gt;</span>
2018 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">adjacent_find</span><span class="special">(</span>
2019   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">);</span>
2020
2021 <span class="keyword">template</span><span class="special">&lt;</span>
2022   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2023 <span class="special">&gt;</span>
2024 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">adjacent_find</span><span class="special">(</span>
2025   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2026   <span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2027
2028 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
2029 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">count</span><span class="special">(</span>
2030   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
2031
2032 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
2033 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">count_if</span><span class="special">(</span>
2034   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2035
2036 <span class="keyword">template</span><span class="special">&lt;</span>
2037   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span>
2038 <span class="special">&gt;</span>
2039 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="identifier">InputIterator</span><span class="special">&gt;</span> <span class="identifier">mismatch</span><span class="special">(</span>
2040   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2041   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">);</span>
2042
2043 <span class="keyword">template</span><span class="special">&lt;</span>
2044   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2045   <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2046 <span class="special">&gt;</span>
2047 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="identifier">InputIterator</span><span class="special">&gt;</span> <span class="identifier">mismatch</span><span class="special">(</span>
2048   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2049   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2050
2051 <span class="keyword">template</span><span class="special">&lt;</span>
2052   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span>
2053 <span class="special">&gt;</span>
2054 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="identifier">InputIterator</span><span class="special">&gt;</span> <span class="identifier">mismatch</span><span class="special">(</span>
2055   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2056   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last2</span><span class="special">);</span>
2057
2058 <span class="keyword">template</span><span class="special">&lt;</span>
2059   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2060   <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2061 <span class="special">&gt;</span>
2062 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="identifier">InputIterator</span><span class="special">&gt;</span> <span class="identifier">mismatch</span><span class="special">(</span>
2063   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2064   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2065
2066 <span class="keyword">template</span><span class="special">&lt;</span>
2067   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span>
2068 <span class="special">&gt;</span>
2069 <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span>
2070   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2071   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">);</span>
2072
2073 <span class="keyword">template</span><span class="special">&lt;</span>
2074   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2075   <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2076 <span class="special">&gt;</span>
2077 <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span>
2078   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2079   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2080
2081 <span class="keyword">template</span><span class="special">&lt;</span>
2082   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span>
2083 <span class="special">&gt;</span>
2084 <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span>
2085   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2086   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last2</span><span class="special">);</span>
2087
2088 <span class="keyword">template</span><span class="special">&lt;</span>
2089   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2090   <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2091 <span class="special">&gt;</span>
2092 <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span>
2093   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2094   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">InputIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2095
2096 <span class="keyword">template</span><span class="special">&lt;</span>
2097   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span>
2098 <span class="special">&gt;</span>
2099 <span class="keyword">bool</span> <span class="identifier">is_permutation</span><span class="special">(</span>
2100   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2101   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">);</span>
2102
2103 <span class="keyword">template</span><span class="special">&lt;</span>
2104   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2105   <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2106 <span class="special">&gt;</span>
2107 <span class="keyword">bool</span> <span class="identifier">is_permutation</span><span class="special">(</span>
2108   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2109   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2110
2111 <span class="keyword">template</span><span class="special">&lt;</span>
2112   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span>
2113 <span class="special">&gt;</span>
2114 <span class="keyword">bool</span> <span class="identifier">is_permutation</span><span class="special">(</span>
2115   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2116   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">);</span>
2117
2118 <span class="keyword">template</span><span class="special">&lt;</span>
2119   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2120   <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2121 <span class="special">&gt;</span>
2122 <span class="keyword">bool</span> <span class="identifier">is_permutation</span><span class="special">(</span>
2123   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2124   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2125
2126 <span class="keyword">template</span><span class="special">&lt;</span>
2127   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ForwardIterator</span>
2128 <span class="special">&gt;</span>
2129 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">search</span><span class="special">(</span>
2130   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2131   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">);</span>
2132
2133 <span class="keyword">template</span><span class="special">&lt;</span>
2134   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2135   <span class="keyword">typename</span> <span class="identifier">ForwardIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2136 <span class="special">&gt;</span>
2137 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">search</span><span class="special">(</span>
2138   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2139   <span class="identifier">ForwardIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">ForwardIterator</span> <span class="identifier">last2</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2140
2141 <span class="keyword">template</span><span class="special">&lt;</span>
2142   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Size</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span>
2143 <span class="special">&gt;</span>
2144 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">search_n</span><span class="special">(</span>
2145   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2146   <span class="identifier">Size</span> <span class="identifier">count</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
2147
2148 <span class="keyword">template</span><span class="special">&lt;</span>
2149   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2150   <span class="keyword">typename</span> <span class="identifier">Size</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2151 <span class="special">&gt;</span>
2152 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">search_n</span><span class="special">(</span>
2153   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2154   <span class="identifier">Size</span> <span class="identifier">count</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2155
2156 <span class="emphasis"><em><code class="computeroutput"><span class="comment">// modifying sequence operations:</span></code></em></span>
2157
2158 <span class="keyword">template</span><span class="special">&lt;</span>
2159   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span>
2160 <span class="special">&gt;</span>
2161 <span class="identifier">OutputIterator</span> <span class="identifier">copy</span><span class="special">(</span>
2162   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2163   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">);</span>
2164
2165 <span class="keyword">template</span><span class="special">&lt;</span>
2166   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2167   <span class="keyword">typename</span> <span class="identifier">Size</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span>
2168 <span class="special">&gt;</span>
2169 <span class="identifier">OutputIterator</span> <span class="identifier">copy_n</span><span class="special">(</span>
2170   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">Size</span> <span class="identifier">count</span><span class="special">,</span><span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">);</span>
2171
2172 <span class="keyword">template</span><span class="special">&lt;</span>
2173   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2174   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span>
2175 <span class="special">&gt;</span>
2176 <span class="identifier">OutputIterator</span> <span class="identifier">copy_if</span><span class="special">(</span>
2177   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2178   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2179
2180 <span class="keyword">template</span><span class="special">&lt;</span>
2181   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span>
2182 <span class="special">&gt;</span>
2183 <span class="identifier">OutputIterator</span> <span class="identifier">move</span><span class="special">(</span>
2184   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2185   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">);</span>
2186
2187 <span class="keyword">template</span><span class="special">&lt;</span>
2188   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2189   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">UnaryOperation</span>
2190 <span class="special">&gt;</span>
2191 <span class="identifier">OutputIterator</span> <span class="identifier">transform</span><span class="special">(</span>
2192   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2193   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">UnaryOperation</span> <span class="identifier">op</span><span class="special">);</span>
2194
2195 <span class="keyword">template</span><span class="special">&lt;</span>
2196   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2197   <span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryOperation</span>
2198 <span class="special">&gt;</span>
2199 <span class="identifier">OutputIterator</span> <span class="identifier">transform</span><span class="special">(</span>
2200   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first1</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last1</span><span class="special">,</span>
2201   <span class="identifier">InputIterator</span> <span class="identifier">first2</span><span class="special">,</span><span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">BinaryOperation</span> <span class="identifier">op</span><span class="special">);</span>
2202
2203 <span class="keyword">template</span><span class="special">&lt;</span>
2204   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2205   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span>
2206 <span class="special">&gt;</span>
2207 <span class="identifier">OutputIterator</span> <span class="identifier">replace_copy</span><span class="special">(</span>
2208   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2209   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">old_x</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">new_x</span><span class="special">);</span>
2210
2211 <span class="keyword">template</span><span class="special">&lt;</span>
2212   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2213   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span>
2214 <span class="special">&gt;</span>
2215 <span class="identifier">OutputIterator</span> <span class="identifier">replace_copy_if</span><span class="special">(</span>
2216   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2217   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">new_x</span><span class="special">);</span>
2218
2219 <span class="keyword">template</span><span class="special">&lt;</span>
2220   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2221   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">T</span>
2222 <span class="special">&gt;</span>
2223 <span class="identifier">OutputIterator</span> <span class="identifier">remove_copy</span><span class="special">(</span>
2224   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2225   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
2226
2227 <span class="keyword">template</span><span class="special">&lt;</span>
2228   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2229   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span>
2230 <span class="special">&gt;</span>
2231 <span class="identifier">OutputIterator</span> <span class="identifier">remove_copy_if</span><span class="special">(</span>
2232   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2233   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2234
2235 <span class="keyword">template</span><span class="special">&lt;</span>
2236   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span>
2237 <span class="special">&gt;</span>
2238 <span class="identifier">OutputIterator</span> <span class="identifier">unique_copy</span><span class="special">(</span>
2239   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2240   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">);</span>
2241
2242 <span class="keyword">template</span><span class="special">&lt;</span>
2243   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2244   <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">BinaryPredicate</span>
2245 <span class="special">&gt;</span>
2246 <span class="identifier">OutputIterator</span> <span class="identifier">unique_copy</span><span class="special">(</span>
2247   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2248   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">BinaryPredicate</span> <span class="identifier">pred</span><span class="special">);</span>
2249
2250 <span class="keyword">template</span><span class="special">&lt;</span>
2251   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span>
2252 <span class="special">&gt;</span>
2253 <span class="identifier">OutputIterator</span> <span class="identifier">rotate_copy</span><span class="special">(</span>
2254   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">middle</span><span class="special">,</span>
2255   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">);</span>
2256
2257 <span class="keyword">template</span><span class="special">&lt;</span>
2258   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span>
2259   <span class="keyword">typename</span> <span class="identifier">Distance</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">UniformRandomBitGenerator</span>
2260 <span class="special">&gt;</span>
2261 <span class="identifier">OutputIterator</span> <span class="identifier">sample</span><span class="special">(</span>
2262   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2263   <span class="identifier">OutputIterator</span> <span class="identifier">res</span><span class="special">,</span><span class="identifier">Distance</span> <span class="identifier">n</span><span class="special">,</span><span class="identifier">UniformRandomBitGenerator</span><span class="special">&amp;&amp;</span> <span class="identifier">g</span><span class="special">);</span>
2264
2265 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
2266 <span class="keyword">bool</span> <span class="identifier">is_partitioned</span><span class="special">(</span>
2267   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2268
2269 <span class="keyword">template</span><span class="special">&lt;</span>
2270   <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span>
2271   <span class="keyword">typename</span> <span class="identifier">OutputIterator1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">OutputIterator2</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span>
2272 <span class="special">&gt;</span>
2273 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">OutputIterator1</span><span class="special">,</span><span class="identifier">OutputIterator2</span><span class="special">&gt;</span> <span class="identifier">partition_copy</span><span class="special">(</span>
2274   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span>
2275   <span class="identifier">OutputIterator1</span> <span class="identifier">rest</span><span class="special">,</span><span class="identifier">OutputIterator2</span> <span class="identifier">resf</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2276
2277 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Ts</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">PolyCollectionIterator</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
2278 <span class="identifier">PolyCollectionIterator</span> <span class="identifier">partition_point</span><span class="special">(</span>
2279   <span class="identifier">PolyCollectionIterator</span> <span class="identifier">first</span><span class="special">,</span><span class="identifier">PolyCollectionIterator</span> <span class="identifier">last</span><span class="special">,</span><span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
2280
2281 <span class="special">}</span> <span class="comment">/* namespace poly_collection */</span>
2282
2283 <span class="special">}</span> <span class="comment">/* namespace boost */</span>
2284 </pre>
2285 <p>
2286         The algorithms provided mimic the functionality of their homonyms in <a href="http://en.cppreference.com/w/cpp/algorithm" target="_top"><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">algorithm</span><span class="special">&gt;</span></code></a>
2287         but take advantage of the segmented nature of Boost.PolyCollection (global)
2288         iterators to deliver better performance. Additionally, concrete types can
2289         be passed to these algorithms for <span class="emphasis"><em>type restitution</em></span>.
2290       </p>
2291 <p>
2292         For the description of the algorithms we use the following notation:
2293       </p>
2294 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2295 <li class="listitem">
2296             <span class="emphasis"><em><code class="computeroutput"><span class="identifier">alg</span></code></em></span>
2297             is the (unqualified) name of any of the algorithms in <code class="computeroutput"><span class="string">"boost/poly_collection/algorithm.hpp"</span></code>
2298             except <code class="computeroutput"><span class="identifier">copy_n</span></code> and <code class="computeroutput"><span class="identifier">rotate_copy</span></code>.
2299           </li>
2300 <li class="listitem">
2301             <code class="computeroutput"><span class="identifier">first</span></code>, <code class="computeroutput"><span class="identifier">middle</span></code> and <code class="computeroutput"><span class="identifier">last</span></code>
2302             are (same-typed) possibly const global iterators of a collection of Boost.PolyCollection
2303             such that [<code class="computeroutput"><span class="identifier">first</span></code>, <code class="computeroutput"><span class="identifier">middle</span></code>) and [<code class="computeroutput"><span class="identifier">middle</span></code>,
2304             <code class="computeroutput"><span class="identifier">last</span></code>) are valid ranges.
2305           </li>
2306 <li class="listitem">
2307             <code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code>
2308             is a function parameter pack of types <code class="computeroutput"><span class="identifier">Args</span><span class="special">&amp;&amp;...</span></code>,
2309           </li>
2310 <li class="listitem">
2311             <code class="computeroutput"><span class="identifier">Ts</span><span class="special">...</span></code>
2312             is a template parameter pack of arbitrary types.
2313           </li>
2314 </ul></div>
2315 <p>
2316         (1) <span class="emphasis"><em><code class="computeroutput"><span class="identifier">alg</span></code></em></span><code class="computeroutput"><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2317         (2) <code class="computeroutput"><span class="identifier">for_each_n</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2318         (3) <code class="computeroutput"><span class="identifier">copy_n</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2319         (4) <code class="computeroutput"><span class="identifier">rotate_copy</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">middle</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>
2320       </p>
2321 <p>
2322         <span class="bold"><strong>Requires:</strong></span> The expression <code class="computeroutput"><span class="identifier">expr</span></code>
2323         is well-formed, where <code class="computeroutput"><span class="identifier">expr</span></code>
2324         is defined as:<br> (1) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code><span class="emphasis"><em><code class="computeroutput"><span class="identifier">alg</span></code></em></span><code class="computeroutput"><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2325         (2) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each_n</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2326         (3) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy_n</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2327         (4) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">rotate_copy</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">middle</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>.<br> <span class="bold"><strong>Effects:</strong></span>
2328         Equivalent to <code class="computeroutput"><span class="identifier">expr</span></code>.<br>
2329         <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">expr</span></code>.<br>
2330         <span class="bold"><strong>Complexity:</strong></span> That of <code class="computeroutput"><span class="identifier">expr</span></code>.
2331       </p>
2332 <p>
2333         (1) <span class="emphasis"><em><code class="computeroutput"><span class="identifier">alg</span></code></em></span><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">Ts</span><span class="special">...&gt;(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2334         (2) <code class="computeroutput"><span class="identifier">for_each_n</span><span class="special">&lt;</span><span class="identifier">Ts</span><span class="special">...&gt;(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2335         (3) <code class="computeroutput"><span class="identifier">copy_n</span><span class="special">&lt;</span><span class="identifier">Ts</span><span class="special">...&gt;(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code><br>
2336         (4) <code class="computeroutput"><span class="identifier">rotate_copy</span><span class="special">&lt;</span><span class="identifier">Ts</span><span class="special">...&gt;(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">middle</span><span class="special">,</span><span class="identifier">last</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>
2337       </p>
2338 <p>
2339         <span class="bold"><strong>Requires:</strong></span> The expression <code class="computeroutput"><span class="identifier">expr</span></code>
2340         is well-formed, where <code class="computeroutput"><span class="identifier">expr</span></code>
2341         is defined as:<br> (1) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code><span class="emphasis"><em><code class="computeroutput"><span class="identifier">alg</span></code></em></span><code class="computeroutput"><span class="special">(</span><span class="identifier">rfirst</span><span class="special">,</span><span class="identifier">rlast</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2342         (2) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each_n</span><span class="special">(</span><span class="identifier">rfirst</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2343         (3) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy_n</span><span class="special">(</span><span class="identifier">rfirst</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2344         (4) <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">rotate_copy</span><span class="special">(</span><span class="identifier">rfirst</span><span class="special">,</span><span class="identifier">rmiddle</span><span class="special">,</span><span class="identifier">rlast</span><span class="special">,</span><span class="identifier">args</span><span class="special">...)</span></code>,<br>
2345         and <code class="computeroutput"><span class="identifier">rfirst</span></code>, <code class="computeroutput"><span class="identifier">rmiddle</span></code> and <code class="computeroutput"><span class="identifier">rlast</span></code>
2346         are iterator-like objects behaving like their <code class="computeroutput"><span class="identifier">first</span></code>,
2347         <code class="computeroutput"><span class="identifier">middle</span></code> and <code class="computeroutput"><span class="identifier">last</span></code> counterparts except that they dereference
2348         to the corresponding subobject (<code class="computeroutput"><span class="keyword">const</span></code>)
2349         <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>
2350         if pointing to a segment for <code class="computeroutput"><span class="identifier">T</span></code>
2351         and <code class="computeroutput"><span class="identifier">T</span></code> is in <code class="computeroutput"><span class="identifier">Ts</span><span class="special">...</span></code>
2352         <a href="#ftn.poly_collection.reference.header_boost_poly_collection_alg.f0" class="footnote" name="poly_collection.reference.header_boost_poly_collection_alg.f0"><sup class="footnote">[27]</sup></a>.<br> <span class="bold"><strong>Effects:</strong></span> Equivalent to
2353         <code class="computeroutput"><span class="identifier">expr</span></code>.<br> <span class="bold"><strong>Returns:</strong></span>
2354         <code class="computeroutput"><span class="identifier">expr</span></code>.<br> <span class="bold"><strong>Complexity:</strong></span>
2355         That of <code class="computeroutput"><span class="identifier">expr</span></code>.
2356       </p>
2357 </div>
2358 <div class="footnotes">
2359 <br><hr style="width:100; text-align:left;margin-left: 0">
2360 <div id="ftn.poly_collection.reference.polymorphism_models.f0" class="footnote"><p><a href="#poly_collection.reference.polymorphism_models.f0" class="para"><sup class="para">[22] </sup></a>
2361               This is a metalinguistic definition not directly expressible in C++.
2362               There are equivalent formulations that can indeed be realized in C++,
2363               but they add little to the comprehension of the concepts.
2364             </p></div>
2365 <div id="ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.f0" class="footnote"><p><a href="#poly_collection.reference.polymorphic_containers.polymorphic_collections.f0" class="para"><sup class="para">[23] </sup></a>
2366             The global <code class="computeroutput"><span class="identifier">end</span><span class="special">()</span></code>
2367             iterator lies outside any segment, hence it always remain valid.
2368           </p></div>
2369 <div id="ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f0" class="footnote"><p><a href="#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f0" class="para"><sup class="para">[24] </sup></a>
2370               Note that, unlike <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span><span class="identifier">i2</span><span class="special">)</span></code>, these versions do not throw due to
2371               type registration problems.
2372             </p></div>
2373 <div id="ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f1" class="footnote"><p><a href="#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f1" class="para"><sup class="para">[25] </sup></a>
2374               That is, the hint remains stable even if <code class="computeroutput"><span class="identifier">it</span></code>
2375               may become invalid due to reallocations.
2376             </p></div>
2377 <div id="ftn.poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f2" class="footnote"><p><a href="#poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers.f2" class="para"><sup class="para">[26] </sup></a>
2378               The two previous notes apply here.
2379             </p></div>
2380 <div id="ftn.poly_collection.reference.header_boost_poly_collection_alg.f0" class="footnote"><p><a href="#poly_collection.reference.header_boost_poly_collection_alg.f0" class="para"><sup class="para">[27] </sup></a>
2381           Strictly speaking a proper <a href="http://en.cppreference.com/w/cpp/named_req/ForwardIterator" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">ForwardIterator</span></code></strong></span></a>
2382           cannot behave like this as dereferencing must yield <span class="emphasis"><em>exactly</em></span>
2383           a (<code class="computeroutput"><span class="keyword">const</span></code>) <code class="computeroutput"><span class="identifier">value_type</span><span class="special">&amp;</span></code> value, which disallows this type of
2384           polymorphism.
2385         </p></div>
2386 </div>
2387 </div>
2388 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
2389 <td align="left"></td>
2390 <td align="right"><div class="copyright-footer">Copyright &#169; 2016-2019 Joaqu&#237;n
2391       M L&#243;pez Mu&#241;oz<p>
2392         Distributed under the Boost Software License, Version 1.0. (See accompanying
2393         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
2394       </p>
2395 </div></td>
2396 </tr></table>
2397 <hr>
2398 <div class="spirit-nav">
2399 <a accesskey="p" href="performance.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="future_work.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
2400 </div>
2401 </body>
2402 </html>