• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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=UTF-8">
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 28. 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            ∈ <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            ≠ <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 © 2016-2020 Joaquín M López Muñoz<p>
2391        Distributed under the Boost Software License, Version 1.0. (See accompanying
2392        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>)
2393      </p>
2394</div></td>
2395</tr></table>
2396<hr>
2397<div class="spirit-nav">
2398<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>
2399</div>
2400</body>
2401</html>
2402