summaryrefslogtreecommitdiff
path: root/libs/fusion
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:30:07 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:32:57 +0900
commit71d216b90256936a9638f325af9bc69d720e75de (patch)
tree9c5f682d341c7c88ad0c8e3d4b262e00b6fb691a /libs/fusion
parent733b5d5ae2c5d625211e2985ac25728ac3f54883 (diff)
downloadboost-71d216b90256936a9638f325af9bc69d720e75de.tar.gz
boost-71d216b90256936a9638f325af9bc69d720e75de.tar.bz2
boost-71d216b90256936a9638f325af9bc69d720e75de.zip
Imported Upstream version 1.59.0
Change-Id: I2dde00f4eca71df3eea9d251dcaecde18a6c90a5 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'libs/fusion')
-rw-r--r--libs/fusion/doc/extension.qbk4
-rw-r--r--libs/fusion/doc/functional.qbk2
-rw-r--r--libs/fusion/doc/fusion.qbk4
-rw-r--r--libs/fusion/doc/html/fusion/extension/iterator_facade.html3
-rw-r--r--libs/fusion/doc/html/fusion/extension/sequence_facade.html3
-rw-r--r--libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html2
-rw-r--r--libs/fusion/doc/html/fusion/iterator.html2
-rw-r--r--libs/fusion/doc/html/fusion/iterator/concepts.html2
-rw-r--r--libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html6
-rw-r--r--libs/fusion/doc/html/fusion/iterator/concepts/unbounded_iterator.html55
-rw-r--r--libs/fusion/doc/html/fusion/iterator/functions.html6
-rw-r--r--libs/fusion/doc/html/fusion/sequence.html2
-rw-r--r--libs/fusion/doc/html/fusion/sequence/concepts.html11
-rw-r--r--libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html6
-rw-r--r--libs/fusion/doc/html/fusion/sequence/concepts/unbounded_sequence.html371
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic.html6
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html3
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html3
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html4
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html6
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html7
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html4
-rw-r--r--libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html4
-rw-r--r--libs/fusion/doc/html/fusion/support/category_of.html2
-rw-r--r--libs/fusion/doc/html/index.html6
-rw-r--r--libs/fusion/doc/html/quickbook_HTML.manifest2
-rw-r--r--libs/fusion/doc/iterator.qbk6
-rw-r--r--libs/fusion/doc/sequence.qbk68
-rw-r--r--libs/fusion/doc/support.qbk2
-rw-r--r--libs/fusion/test/Jamfile6
-rw-r--r--libs/fusion/test/algorithm/pop_back.cpp4
-rw-r--r--libs/fusion/test/sequence/adapt_adt.cpp3
-rw-r--r--libs/fusion/test/sequence/adapt_adt_named.cpp4
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_adt.cpp3
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_adt_named.cpp3
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_struct.cpp3
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_struct_named.cpp3
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_tpl_adt.cpp14
-rw-r--r--libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp14
-rw-r--r--libs/fusion/test/sequence/adapt_struct.cpp36
-rw-r--r--libs/fusion/test/sequence/adapt_struct_named.cpp4
-rw-r--r--libs/fusion/test/sequence/adapt_tpl_adt.cpp14
-rw-r--r--libs/fusion/test/sequence/adapt_tpl_struct.cpp13
-rw-r--r--libs/fusion/test/sequence/define_struct.cpp24
-rw-r--r--libs/fusion/test/sequence/define_struct_inline.cpp18
-rw-r--r--libs/fusion/test/sequence/deque_nest.cpp19
-rw-r--r--libs/fusion/test/sequence/iterator.hpp2
-rw-r--r--libs/fusion/test/sequence/list_nest.cpp19
-rw-r--r--libs/fusion/test/sequence/map.cpp2
-rw-r--r--libs/fusion/test/sequence/nest.hpp58
-rw-r--r--libs/fusion/test/sequence/tuple_nest.cpp19
-rw-r--r--libs/fusion/test/sequence/vector_nest.cpp19
-rw-r--r--libs/fusion/test/support/index_sequence.cpp32
-rw-r--r--libs/fusion/test/support/pair_nest.cpp24
54 files changed, 932 insertions, 30 deletions
diff --git a/libs/fusion/doc/extension.qbk b/libs/fusion/doc/extension.qbk
index cbb61ce5dc..21ebd8494e 100644
--- a/libs/fusion/doc/extension.qbk
+++ b/libs/fusion/doc/extension.qbk
@@ -400,7 +400,7 @@ producing a conforming Fusion sequence.
[heading Usage]
The user of __sequence_facade__ derives his sequence type from a specialization of __sequence_facade__ and passes the derived sequence type as the first template parameter. The second template parameter should be the traversal category of the sequence being implemented. The 3rd parameter should be set to `mpl::true_` if the sequence is a view.
-The user must the implement the key expressions required by their sequence type.
+The user must implement the key expressions required by their sequence type.
[table Parameters
[[Name][Description]]
@@ -447,7 +447,7 @@ producing a conforming Fusion iterator.
[heading Usage]
The user of iterator_facade derives his iterator type from a specialization of iterator_facade and passes the derived iterator type as the first template parameter. The second template parameter should be the traversal category of the iterator being implemented.
-The user must the implement the key expressions required by their iterator type.
+The user must implement the key expressions required by their iterator type.
[table Parameters
[[Name][Description]]
diff --git a/libs/fusion/doc/functional.qbk b/libs/fusion/doc/functional.qbk
index 4a8e3d81a4..7205a0b26d 100644
--- a/libs/fusion/doc/functional.qbk
+++ b/libs/fusion/doc/functional.qbk
@@ -689,7 +689,7 @@ is not implemented).
[[`R`] [A possibly const qualified __callable_obj__ type or reference type thereof]]
[[`r`] [An object convertible to `R`]]
[[`s`] [A __sequence__ of arguments that are accepted by `r`]]
- [[`f`] [An instance of `fused<R>`]]
+ [[`f`] [An instance of `fused_procedure<R>`]]
]
[heading Expression Semantics]
diff --git a/libs/fusion/doc/fusion.qbk b/libs/fusion/doc/fusion.qbk
index 81542f02ba..0a24cb32ca 100644
--- a/libs/fusion/doc/fusion.qbk
+++ b/libs/fusion/doc/fusion.qbk
@@ -79,6 +79,7 @@
[def __bidirectional_iterator__ [link fusion.iterator.concepts.bidirectional_iterator Bidirectional Iterator]]
[def __random_access_iterator__ [link fusion.iterator.concepts.random_access_iterator Random Access Iterator]]
[def __associative_iterator__ [link fusion.iterator.concepts.associative_iterator Associative Iterator]]
+[def __unbounded_iterator__ [link fusion.iterator.concepts.unbounded_iterator Unbounded Iterator]]
[def __next__ [link fusion.iterator.functions.next `next`]]
[def __prior__ [link fusion.iterator.functions.prior `prior`]]
@@ -108,6 +109,7 @@
[def __bidirectional_sequence__ [link fusion.sequence.concepts.bidirectional_sequence Bidirectional Sequence]]
[def __random_access_sequence__ [link fusion.sequence.concepts.random_access_sequence Random Access Sequence]]
[def __associative_sequence__ [link fusion.sequence.concepts.associative_sequence Associative Sequence]]
+[def __unbounded_sequence__ [link fusion.sequence.concepts.unbounded_sequence Unbounded Sequence]]
[def __containers__ [link fusion.container Container]]
[def __vector__ [link fusion.container.vector `vector`]]
@@ -337,6 +339,8 @@
[def __adt_attribute_proxy__ [link fusion.notes.adt_attribute_proxy `adt_attribute_proxy`]]
+[def __window_function__ [@http://en.wikipedia.org/wiki/Window_function Window Function]]
+
[include preface.qbk]
[include introduction.qbk]
[include quick_start.qbk]
diff --git a/libs/fusion/doc/html/fusion/extension/iterator_facade.html b/libs/fusion/doc/html/fusion/extension/iterator_facade.html
index a2e623f5c3..19cea2213c 100644
--- a/libs/fusion/doc/html/fusion/extension/iterator_facade.html
+++ b/libs/fusion/doc/html/fusion/extension/iterator_facade.html
@@ -53,8 +53,7 @@
of the iterator being implemented.
</p>
<p>
- The user must the implement the key expressions required by their iterator
- type.
+ The user must implement the key expressions required by their iterator type.
</p>
<div class="table">
<a name="fusion.extension.iterator_facade.t0"></a><p class="title"><b>Table&#160;1.108.&#160;Parameters</b></p>
diff --git a/libs/fusion/doc/html/fusion/extension/sequence_facade.html b/libs/fusion/doc/html/fusion/extension/sequence_facade.html
index cacc2dab3d..049fb54f7e 100644
--- a/libs/fusion/doc/html/fusion/extension/sequence_facade.html
+++ b/libs/fusion/doc/html/fusion/extension/sequence_facade.html
@@ -55,8 +55,7 @@
if the sequence is a view.
</p>
<p>
- The user must the implement the key expressions required by their sequence
- type.
+ The user must implement the key expressions required by their sequence type.
</p>
<div class="table">
<a name="fusion.extension.sequence_facade.t0"></a><p class="title"><b>Table&#160;1.106.&#160;Parameters</b></p>
diff --git a/libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html b/libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html
index 5beec8efd9..e07d6d32ae 100644
--- a/libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html
+++ b/libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html
@@ -151,7 +151,7 @@
</p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt>
<dd><p>
- An instance of <code class="computeroutput"><span class="identifier">fused</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span></code>
+ An instance of <code class="computeroutput"><span class="identifier">fused_procedure</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span></code>
</p></dd>
</dl>
</div>
diff --git a/libs/fusion/doc/html/fusion/iterator.html b/libs/fusion/doc/html/fusion/iterator.html
index 01287b05d0..a65e8e69b3 100644
--- a/libs/fusion/doc/html/fusion/iterator.html
+++ b/libs/fusion/doc/html/fusion/iterator.html
@@ -37,6 +37,8 @@
Access Iterator</a></span></dt>
<dt><span class="section"><a href="iterator/concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
+<dt><span class="section"><a href="iterator/concepts/unbounded_iterator.html">Unbounded
+ Iterator</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="iterator/functions.html">Functions</a></span></dt>
<dd><dl>
diff --git a/libs/fusion/doc/html/fusion/iterator/concepts.html b/libs/fusion/doc/html/fusion/iterator/concepts.html
index 4ac61f6a96..5d0c407069 100644
--- a/libs/fusion/doc/html/fusion/iterator/concepts.html
+++ b/libs/fusion/doc/html/fusion/iterator/concepts.html
@@ -35,6 +35,8 @@
Access Iterator</a></span></dt>
<dt><span class="section"><a href="concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
+<dt><span class="section"><a href="concepts/unbounded_iterator.html">Unbounded
+ Iterator</a></span></dt>
</dl></div>
<p>
Fusion iterators are divided into different traversal categories. <a class="link" href="concepts/forward_iterator.html" title="Forward Iterator">Forward
diff --git a/libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html b/libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html
index a43c9794a5..4661ce6bdd 100644
--- a/libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html
+++ b/libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html
@@ -7,7 +7,7 @@
<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="up" href="../concepts.html" title="Concepts">
<link rel="prev" href="random_access_iterator.html" title="Random Access Iterator">
-<link rel="next" href="../functions.html" title="Functions">
+<link rel="next" href="unbounded_iterator.html" title="Unbounded Iterator">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="random_access_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="random_access_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="unbounded_iterator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
@@ -222,7 +222,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="random_access_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="random_access_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="unbounded_iterator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/libs/fusion/doc/html/fusion/iterator/concepts/unbounded_iterator.html b/libs/fusion/doc/html/fusion/iterator/concepts/unbounded_iterator.html
new file mode 100644
index 0000000000..ec27f5b8fc
--- /dev/null
+++ b/libs/fusion/doc/html/fusion/iterator/concepts/unbounded_iterator.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Unbounded Iterator</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="associative_iterator.html" title="Associative Iterator">
+<link rel="next" href="../functions.html" title="Functions">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="fusion.iterator.concepts.unbounded_iterator"></a><a class="link" href="unbounded_iterator.html" title="Unbounded Iterator">Unbounded
+ Iterator</a>
+</h4></div></div></div>
+<div class="warning"><table border="0" summary="Warning">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
+<th align="left">Warning</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this release, <a class="link" href="unbounded_iterator.html" title="Unbounded Iterator">Unbounded
+ Iterator</a> concept has no effect. It's reserved for future release.
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2001-2006, 2011, 2012 Joel de Guzman,
+ Dan Marsden, Tobias Schwinger<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/fusion/doc/html/fusion/iterator/functions.html b/libs/fusion/doc/html/fusion/iterator/functions.html
index c279312717..210a3da99a 100644
--- a/libs/fusion/doc/html/fusion/iterator/functions.html
+++ b/libs/fusion/doc/html/fusion/iterator/functions.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="up" href="../iterator.html" title="Iterator">
-<link rel="prev" href="concepts/associative_iterator.html" title="Associative Iterator">
+<link rel="prev" href="concepts/unbounded_iterator.html" title="Unbounded Iterator">
<link rel="next" href="functions/deref.html" title="deref">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="concepts/associative_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterator.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="functions/deref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="concepts/unbounded_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterator.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="functions/deref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
@@ -52,7 +52,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="concepts/associative_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterator.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="functions/deref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="concepts/unbounded_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterator.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="functions/deref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/libs/fusion/doc/html/fusion/sequence.html b/libs/fusion/doc/html/fusion/sequence.html
index 1bed592e40..3d0033a5c2 100644
--- a/libs/fusion/doc/html/fusion/sequence.html
+++ b/libs/fusion/doc/html/fusion/sequence.html
@@ -37,6 +37,8 @@
Access Sequence</a></span></dt>
<dt><span class="section"><a href="sequence/concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
+<dt><span class="section"><a href="sequence/concepts/unbounded_sequence.html">Unbounded
+ Sequence</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="sequence/intrinsic.html">Intrinsic</a></span></dt>
<dd><dl>
diff --git a/libs/fusion/doc/html/fusion/sequence/concepts.html b/libs/fusion/doc/html/fusion/sequence/concepts.html
index b6bca56cbe..318cb2e771 100644
--- a/libs/fusion/doc/html/fusion/sequence/concepts.html
+++ b/libs/fusion/doc/html/fusion/sequence/concepts.html
@@ -35,6 +35,8 @@
Access Sequence</a></span></dt>
<dt><span class="section"><a href="concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
+<dt><span class="section"><a href="concepts/unbounded_sequence.html">Unbounded
+ Sequence</a></span></dt>
</dl></div>
<p>
Fusion Sequences are organized into a hierarchy of concepts.
@@ -61,6 +63,15 @@
Sequence</a> concept is orthogonal to traversal. An Associative Sequence
allows efficient retrieval of elements based on keys.
</p>
+<h5>
+<a name="fusion.sequence.concepts.h2"></a>
+ <span class="phrase"><a name="fusion.sequence.concepts.boundary"></a></span><a class="link" href="concepts.html#fusion.sequence.concepts.boundary">Boundary</a>
+ </h5>
+<p>
+ The <a class="link" href="concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded
+ Sequence</a> concept is also orthogonal to traversal and associativity.
+ A Unbounded Sequence allows out-of-bounds access.
+ </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
diff --git a/libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html b/libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html
index a705678413..cc696c53cb 100644
--- a/libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html
+++ b/libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html
@@ -7,7 +7,7 @@
<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="up" href="../concepts.html" title="Concepts">
<link rel="prev" href="random_access_sequence.html" title="Random Access Sequence">
-<link rel="next" href="../intrinsic.html" title="Intrinsic">
+<link rel="next" href="unbounded_sequence.html" title="Unbounded Sequence">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="random_access_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../intrinsic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="random_access_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="unbounded_sequence.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
@@ -348,7 +348,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="random_access_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../intrinsic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="random_access_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="unbounded_sequence.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/libs/fusion/doc/html/fusion/sequence/concepts/unbounded_sequence.html b/libs/fusion/doc/html/fusion/sequence/concepts/unbounded_sequence.html
new file mode 100644
index 0000000000..3a35f34ece
--- /dev/null
+++ b/libs/fusion/doc/html/fusion/sequence/concepts/unbounded_sequence.html
@@ -0,0 +1,371 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Unbounded Sequence</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="associative_sequence.html" title="Associative Sequence">
+<link rel="next" href="../intrinsic.html" title="Intrinsic">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../intrinsic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="fusion.sequence.concepts.unbounded_sequence"></a><a class="link" href="unbounded_sequence.html" title="Unbounded Sequence">Unbounded
+ Sequence</a>
+</h4></div></div></div>
+<h6>
+<a name="fusion.sequence.concepts.unbounded_sequence.h0"></a>
+ <span class="phrase"><a name="fusion.sequence.concepts.unbounded_sequence.description"></a></span><a class="link" href="unbounded_sequence.html#fusion.sequence.concepts.unbounded_sequence.description">Description</a>
+ </h6>
+<p>
+ A Unbounded Sequence allows Out-of-Bounds access: it will achieve something
+ like a <a href="http://en.wikipedia.org/wiki/Window_function" target="_top">Window
+ Function</a>. Most of the sequences do not meet this concept, but some
+ special usecases do.
+ </p>
+<div class="important"><table border="0" summary="Important">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../../doc/src/images/important.png"></td>
+<th align="left">Important</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ User extending sequences should handle any parameters or be SFINAE-friendly.
+ </p></td></tr>
+</table></div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt>
+<dd><p>
+ An Fusion Sequence
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">S</span></code></span></dt>
+<dd><p>
+ An Fusion Sequence type
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">M</span></code></span></dt>
+<dd><p>
+ An <a href="http://www.boost.org/libs/mpl/index.html" target="_top">MPL</a>
+ integral constant
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">N</span></code></span></dt>
+<dd><p>
+ An integral constant
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">K</span></code></span></dt>
+<dd><p>
+ An arbitrary <span class="emphasis"><em>key</em></span> type
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">o</span></code></span></dt>
+<dd><p>
+ An arbitrary object
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">e</span></code></span></dt>
+<dd><p>
+ A Sequence element
+ </p></dd>
+</dl>
+</div>
+<h6>
+<a name="fusion.sequence.concepts.unbounded_sequence.h1"></a>
+ <span class="phrase"><a name="fusion.sequence.concepts.unbounded_sequence.valid_expressions"></a></span><a class="link" href="unbounded_sequence.html#fusion.sequence.concepts.unbounded_sequence.valid_expressions">Valid
+ Expressions</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Return type
+ </p>
+ </th>
+<th>
+ <p>
+ Type Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Runtime Complexity
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at_c.html" title="at_c"><code class="computeroutput"><span class="identifier">at_c</span></code></a><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at_c.html" title="at_c"><code class="computeroutput"><span class="identifier">at_c</span></code></a><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span>
+ <span class="special">=</span> <span class="identifier">o</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at.html" title="at"><code class="computeroutput"><span class="identifier">at</span></code></a><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at.html" title="at"><code class="computeroutput"><span class="identifier">at</span></code></a><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span>
+ <span class="special">=</span> <span class="identifier">o</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at_key.html" title="at_key"><code class="computeroutput"><span class="identifier">at_key</span></code></a><span class="special">&lt;</span><span class="identifier">K</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">S</span></code> should be
+ <a class="link" href="associative_sequence.html" title="Associative Sequence">Associative
+ Sequence</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/functions/at_key.html" title="at_key"><code class="computeroutput"><span class="identifier">at_key</span></code></a><span class="special">&lt;</span><span class="identifier">K</span><span class="special">&gt;(</span><span class="identifier">s</span><span class="special">)</span>
+ <span class="special">=</span> <span class="identifier">o</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Any type
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">S</span></code> should be
+ <a class="link" href="associative_sequence.html" title="Associative Sequence">Associative
+ Sequence</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="fusion.sequence.concepts.unbounded_sequence.h2"></a>
+ <span class="phrase"><a name="fusion.sequence.concepts.unbounded_sequence.result_type_expressions"></a></span><a class="link" href="unbounded_sequence.html#fusion.sequence.concepts.unbounded_sequence.result_type_expressions">Result
+ Type Expressions</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Compile Time Complexity
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/at.html" title="at"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">at</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span>
+ <span class="identifier">M</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/at_c.html" title="at_c"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">at_c</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span>
+ <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/value_at.html" title="value_at"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">value_at</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span>
+ <span class="identifier">M</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/value_at_c.html" title="value_at_c"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">value_at_c</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span>
+ <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/at_key.html" title="at_key"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">at_key</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span>
+ <span class="identifier">K</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><a class="link" href="../intrinsic/metafunctions/value_at_key.html" title="value_at_key"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">value_at_key</span></code></a><span class="special">&lt;</span><span class="identifier">S</span><span class="special">,</span> <span class="identifier">K</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on its traversability
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="fusion.sequence.concepts.unbounded_sequence.h3"></a>
+ <span class="phrase"><a name="fusion.sequence.concepts.unbounded_sequence.models"></a></span><a class="link" href="unbounded_sequence.html#fusion.sequence.concepts.unbounded_sequence.models">Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ none.
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2001-2006, 2011, 2012 Joel de Guzman,
+ Dan Marsden, Tobias Schwinger<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_sequence.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../intrinsic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic.html b/libs/fusion/doc/html/fusion/sequence/intrinsic.html
index c84ce77aca..c9735137f8 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="up" href="../sequence.html" title="Sequence">
-<link rel="prev" href="concepts/associative_sequence.html" title="Associative Sequence">
+<link rel="prev" href="concepts/unbounded_sequence.html" title="Unbounded Sequence">
<link rel="next" href="intrinsic/functions.html" title="Functions">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="concepts/associative_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../sequence.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="intrinsic/functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="concepts/unbounded_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../sequence.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="intrinsic/functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
@@ -64,7 +64,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="concepts/associative_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../sequence.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="intrinsic/functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="concepts/unbounded_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../sequence.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="intrinsic/functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html
index 57dd4ee26f..31a3d9d898 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html
@@ -130,7 +130,8 @@
</p>
<p>
<span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="number">0</span>
- <span class="special">&lt;=</span> <span class="identifier">M</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code>
+ <span class="special">&lt;=</span> <span class="identifier">M</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
+ (where <code class="computeroutput"><span class="identifier">seq</span></code> is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded Sequence</a>)
</p>
<p>
<span class="bold"><strong>Semantics</strong></span>: Equivalent to
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html
index 5fdc789996..97155645b4 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html
@@ -130,7 +130,8 @@
<p>
<span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="number">0</span>
<span class="special">&lt;=</span> <span class="identifier">N</span>
- <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code>
+ <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">size</span></code></a><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
+ (where <code class="computeroutput"><span class="identifier">seq</span></code> is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded Sequence</a>)
</p>
<p>
<span class="bold"><strong>Semantics</strong></span>: Equivalent to
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html
index 231bd9d483..112003801a 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html
@@ -127,7 +127,9 @@
a type convertible to the element associated with Key.
</p>
<p>
- <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="identifier">has_key</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">&gt;(</span><span class="identifier">seq</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">true</span></code>
+ <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="identifier">has_key</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">&gt;(</span><span class="identifier">seq</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">true</span></code> (where <code class="computeroutput"><span class="identifier">seq</span></code>
+ is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded
+ Sequence</a>)
</p>
<p>
<span class="bold"><strong>Semantics</strong></span>: Returns the element associated
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html
index 4f592d720f..556692a052 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html
@@ -121,6 +121,12 @@
<span class="bold"><strong>Return type</strong></span>: Any type.
</p>
<p>
+ <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="number">0</span>
+ <span class="special">&lt;=</span> <span class="identifier">M</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">size</span></code></a><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">value</span></code> (where <code class="computeroutput"><span class="identifier">Seq</span></code>
+ is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded
+ Sequence</a>)
+ </p>
+<p>
<span class="bold"><strong>Semantics</strong></span>: Returns the result type of
using <a class="link" href="../functions/at.html" title="at"><code class="computeroutput"><span class="identifier">at</span></code></a> to access the <code class="computeroutput"><span class="identifier">M</span></code>th element of <code class="computeroutput"><span class="identifier">Seq</span></code>.
</p>
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html
index 9a7b38e441..a2538352d2 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html
@@ -120,6 +120,13 @@
<span class="bold"><strong>Return type</strong></span>: Any type
</p>
<p>
+ <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="number">0</span>
+ <span class="special">&lt;=</span> <span class="identifier">N</span>
+ <span class="special">&lt;</span> <a class="link" href="size.html" title="size"><code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">size</span></code></a><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">value</span></code> (where <code class="computeroutput"><span class="identifier">Seq</span></code>
+ is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded
+ Sequence</a>)
+ </p>
+<p>
<span class="bold"><strong>Semantics</strong></span>: Returns the result type of
using <a class="link" href="../functions/at_c.html" title="at_c"><code class="computeroutput"><span class="identifier">at_c</span></code></a> to access the <code class="computeroutput"><span class="identifier">N</span></code>th element of <code class="computeroutput"><span class="identifier">Seq</span></code>.
</p>
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html
index 4eb8e0ca3d..2594822950 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html
@@ -120,6 +120,10 @@
<span class="bold"><strong>Return type</strong></span>: Any type.
</p>
<p>
+ <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="identifier">has_key</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">Key</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="keyword">true</span></code>
+ (where <code class="computeroutput"><span class="identifier">Seq</span></code> is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded Sequence</a>)
+ </p>
+<p>
<span class="bold"><strong>Semantics</strong></span>: Returns the result of using
<a class="link" href="../functions/at_key.html" title="at_key"><code class="computeroutput"><span class="identifier">at_key</span></code></a> to access the element
with key type <code class="computeroutput"><span class="identifier">Key</span></code> in
diff --git a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html
index a3262b9731..132423fb0f 100644
--- a/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html
+++ b/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html
@@ -120,6 +120,10 @@
<span class="bold"><strong>Return type</strong></span>: Any type.
</p>
<p>
+ <span class="bold"><strong>Precondition</strong></span>: <code class="computeroutput"><span class="identifier">has_key</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">Key</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="keyword">true</span></code>
+ (where <code class="computeroutput"><span class="identifier">Seq</span></code> is not <a class="link" href="../../concepts/unbounded_sequence.html" title="Unbounded Sequence">Unbounded Sequence</a>)
+ </p>
+<p>
<span class="bold"><strong>Semantics</strong></span>: Returns the actual element
type associated with key type <code class="computeroutput"><span class="identifier">Key</span></code>
in <code class="computeroutput"><span class="identifier">Seq</span></code>.
diff --git a/libs/fusion/doc/html/fusion/support/category_of.html b/libs/fusion/doc/html/fusion/support/category_of.html
index 971c960b7d..9a1469382f 100644
--- a/libs/fusion/doc/html/fusion/support/category_of.html
+++ b/libs/fusion/doc/html/fusion/support/category_of.html
@@ -130,6 +130,8 @@
<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">fusion</span>
<span class="special">{</span>
<span class="keyword">struct</span> <span class="identifier">associative_tag</span> <span class="special">{};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">unbounded_tag</span> <span class="special">{};</span>
<span class="special">}}</span>
</pre>
<p>
diff --git a/libs/fusion/doc/html/index.html b/libs/fusion/doc/html/index.html
index cc1c1ea098..0da6725f82 100644
--- a/libs/fusion/doc/html/index.html
+++ b/libs/fusion/doc/html/index.html
@@ -69,6 +69,8 @@
Access Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
+<dt><span class="section"><a href="fusion/iterator/concepts/unbounded_iterator.html">Unbounded
+ Iterator</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/functions.html">Functions</a></span></dt>
<dd><dl>
@@ -116,6 +118,8 @@
Access Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
+<dt><span class="section"><a href="fusion/sequence/concepts/unbounded_sequence.html">Unbounded
+ Sequence</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/intrinsic.html">Intrinsic</a></span></dt>
<dd><dl>
@@ -274,7 +278,7 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: April 07, 2015 at 22:41:19 GMT</small></p></td>
+<td align="left"><p><small>Last revised: August 04, 2015 at 08:56:10 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
diff --git a/libs/fusion/doc/html/quickbook_HTML.manifest b/libs/fusion/doc/html/quickbook_HTML.manifest
index 5a6291f694..d5676650dc 100644
--- a/libs/fusion/doc/html/quickbook_HTML.manifest
+++ b/libs/fusion/doc/html/quickbook_HTML.manifest
@@ -17,6 +17,7 @@ fusion/iterator/concepts/forward_iterator.html
fusion/iterator/concepts/bidirectional_iterator.html
fusion/iterator/concepts/random_access_iterator.html
fusion/iterator/concepts/associative_iterator.html
+fusion/iterator/concepts/unbounded_iterator.html
fusion/iterator/functions.html
fusion/iterator/functions/deref.html
fusion/iterator/functions/next.html
@@ -47,6 +48,7 @@ fusion/sequence/concepts/forward_sequence.html
fusion/sequence/concepts/bidirectional_sequence.html
fusion/sequence/concepts/random_access_sequence.html
fusion/sequence/concepts/associative_sequence.html
+fusion/sequence/concepts/unbounded_sequence.html
fusion/sequence/intrinsic.html
fusion/sequence/intrinsic/functions.html
fusion/sequence/intrinsic/functions/begin.html
diff --git a/libs/fusion/doc/iterator.qbk b/libs/fusion/doc/iterator.qbk
index d400003c19..ef33240a99 100644
--- a/libs/fusion/doc/iterator.qbk
+++ b/libs/fusion/doc/iterator.qbk
@@ -257,6 +257,12 @@ expressions must be valid:
[endsect]
+[section Unbounded Iterator]
+
+[warning In this release, __unbounded_iterator__ concept has no effect. It's reserved for future release.]
+
+[endsect]
+
[endsect]
[section Functions]
diff --git a/libs/fusion/doc/sequence.qbk b/libs/fusion/doc/sequence.qbk
index 5957a6e1d2..a9fc83d329 100644
--- a/libs/fusion/doc/sequence.qbk
+++ b/libs/fusion/doc/sequence.qbk
@@ -39,6 +39,11 @@ These concepts pertain to sequence traversal.
The __associative_sequence__ concept is orthogonal to traversal. An Associative
Sequence allows efficient retrieval of elements based on keys.
+[heading Boundary]
+
+The __unbounded_sequence__ concept is also orthogonal to traversal and associativity.
+A Unbounded Sequence allows out-of-bounds access.
+
[section Forward Sequence]
[heading Description]
@@ -359,6 +364,55 @@ you can use `__result_of_value_at_key__<S, K>`.]
[endsect]
+[section Unbounded Sequence]
+
+[heading Description]
+
+A Unbounded Sequence allows Out-of-Bounds access: it will achieve something like a __window_function__.
+Most of the sequences do not meet this concept, but some special usecases do.
+
+[important User extending sequences should handle any parameters or be SFINAE-friendly.]
+
+[variablelist Notation
+ [[`s`] [An Fusion Sequence]]
+ [[`S`] [An Fusion Sequence type]]
+ [[`M`] [An __mpl__ integral constant]]
+ [[`N`] [An integral constant]]
+ [[`K`] [An arbitrary /key/ type]]
+ [[`o`] [An arbitrary object]]
+ [[`e`] [A Sequence element]]
+]
+
+[heading Valid Expressions]
+
+[table
+ [[Expression] [Return type] [Type Requirements] [Runtime Complexity]]
+ [[`__at_c__<N>(s)`] [Any type] [] [Depends on its traversability]]
+ [[`__at_c__<N>(s) = o`] [Any type] [] [Depends on its traversability]]
+ [[`__at__<M>(s)`] [Any type] [] [Depends on its traversability]]
+ [[`__at__<M>(s) = o`] [Any type] [] [Depends on its traversability]]
+ [[`__at_key__<K>(s)`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
+ [[`__at_key__<K>(s) = o`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
+]
+
+[heading Result Type Expressions]
+
+[table
+ [[Expression] [Compile Time Complexity]]
+ [[`__result_of_at__<S, M>::type`] [Depends on its traversability]]
+ [[`__result_of_at_c__<S, N>::type`] [Depends on its traversability]]
+ [[`__result_of_value_at__<S, M>::type`] [Depends on its traversability]]
+ [[`__result_of_value_at_c__<S, N>::type`] [Depends on its traversability]]
+ [[`__result_of_at_key__<S, K>::type`] [Depends on its traversability]]
+ [[`__result_of_value_at_key__<S, K>::type`] [Depends on its traversability]]
+]
+
+[heading Models]
+
+* none.
+
+[endsect]
+
[endsect]
[section Intrinsic]
@@ -686,7 +740,7 @@ element from the beginning of the sequence, is a valid expression. Else,
returns a type convertible to the M-th element from the beginning of the
sequence.
-[*Precondition]: `0 <= M::value < __size__(s)`
+[*Precondition]: `0 <= M::value < __size__(seq)` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Equivalent to
@@ -739,7 +793,7 @@ element from the beginning of the sequence, is a valid expression. Else,
returns a type convertible to the N-th element from the beginning of the
sequence.
-[*Precondition]: `0 <= N < __size__(s)`
+[*Precondition]: `0 <= N < __size__(seq)` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Equivalent to
@@ -833,7 +887,7 @@ the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the
element associated with Key, is a valid expression. Else, returns a type
convertible to the element associated with Key.
-[*Precondition]: `has_key<Key>(seq) == true`
+[*Precondition]: `has_key<Key>(seq) == true` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Returns the element associated with Key.
@@ -1149,6 +1203,8 @@ the actual element type, use __result_of_value_at__].
[*Return type]: Any type.
+[*Precondition]: `0 <= M::value < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
+
[*Semantics]: Returns the result type of using __at__ to access the `M`th element of `Seq`.
[heading Header]
@@ -1191,6 +1247,8 @@ get the actual element type, use __result_of_value_at_c__].
[*Return type]: Any type
+[*Precondition]: `0 <= N < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
+
[*Semantics]: Returns the result type of using __at_c__ to access the `N`th element of `Seq`.
[heading Header]
@@ -1350,6 +1408,8 @@ you want to get the actual element type, use __result_of_value_at_key__].
[*Return type]: Any type.
+[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
+
[*Semantics]: Returns the result of using __at_key__ to access the element with key type `Key` in `Seq`.
[heading Header]
@@ -1388,6 +1448,8 @@ Returns the actual element type associated with a Key from the __sequence__.
[*Return type]: Any type.
+[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
+
[*Semantics]: Returns the actual element type associated with key type
`Key` in `Seq`.
diff --git a/libs/fusion/doc/support.qbk b/libs/fusion/doc/support.qbk
index 3e7b7a7072..3e3b8a4edf 100644
--- a/libs/fusion/doc/support.qbk
+++ b/libs/fusion/doc/support.qbk
@@ -227,6 +227,8 @@ And optionally from:
namespace boost { namespace fusion
{
struct associative_tag {};
+
+ struct unbounded_tag {};
}}
[*Semantics]: Establishes the conceptual classification of a particular
diff --git a/libs/fusion/test/Jamfile b/libs/fusion/test/Jamfile
index 752a798ad6..f9c71c7190 100644
--- a/libs/fusion/test/Jamfile
+++ b/libs/fusion/test/Jamfile
@@ -78,6 +78,7 @@ project
[ run sequence/list_make.cpp : : : : ]
[ run sequence/list_misc.cpp : : : : ]
[ run sequence/list_mutate.cpp : : : : ]
+ [ run sequence/list_nest.cpp : : : : ]
[ run sequence/list_tie.cpp : : : : ]
[ run sequence/list_value_at.cpp : : : : ]
[ run sequence/deque_comparison.cpp : : : : ]
@@ -89,6 +90,7 @@ project
[ run sequence/deque_misc.cpp : : : : ]
[ run sequence/deque_move.cpp : : : : ]
[ run sequence/deque_mutate.cpp : : : : ]
+ [ run sequence/deque_nest.cpp : : : : ]
[ run sequence/deque_tie.cpp : : : : ]
[ run sequence/deque_value_at.cpp : : : : ]
[ run sequence/front_extended_deque.cpp : : : : ]
@@ -119,6 +121,7 @@ project
[ run sequence/tuple_make.cpp : : : : ]
[ run sequence/tuple_misc.cpp : : : : ]
[ run sequence/tuple_mutate.cpp : : : : ]
+ [ run sequence/tuple_nest.cpp : : : : ]
[ run sequence/tuple_hash.cpp : : : : ]
[ run sequence/tuple_tie.cpp : : : : ]
[ run sequence/transform_view.cpp : : : : ]
@@ -131,6 +134,7 @@ project
[ run sequence/vector_move.cpp : : : : ]
[ run sequence/vector_mutate.cpp : : : : ]
[ run sequence/vector_n.cpp : : : : ]
+ [ run sequence/vector_nest.cpp : : : : ]
[ run sequence/vector_hash.cpp : : : : ]
[ run sequence/vector_tie.cpp : : : : ]
[ run sequence/vector_value_at.cpp : : : : ]
@@ -184,6 +188,8 @@ project
[ compile support/pair_map.cpp : : : : ]
[ compile support/pair_set.cpp : : : : ]
[ compile support/pair_vector.cpp : : : : ]
+ [ compile support/pair_nest.cpp : : : : ]
+ [ compile support/index_sequence.cpp : : : : ]
# [ compile-fail xxx.cpp : : : : ]
diff --git a/libs/fusion/test/algorithm/pop_back.cpp b/libs/fusion/test/algorithm/pop_back.cpp
index b594f6c850..5e45e77994 100644
--- a/libs/fusion/test/algorithm/pop_back.cpp
+++ b/libs/fusion/test/algorithm/pop_back.cpp
@@ -65,8 +65,8 @@ main()
std::cout << pop_back(sv) << std::endl;
// Compile check only
- begin(pop_back(sv)) == end(sv);
- end(pop_back(sv)) == begin(sv);
+ (void)(begin(pop_back(sv)) == end(sv));
+ (void)(end(pop_back(sv)) == begin(sv));
}
// $$$ JDG: TODO add compile fail facility $$$
diff --git a/libs/fusion/test/sequence/adapt_adt.cpp b/libs/fusion/test/sequence/adapt_adt.cpp
index 265cfca595..bf5d4ca0c1 100644
--- a/libs/fusion/test/sequence/adapt_adt.cpp
+++ b/libs/fusion/test/sequence/adapt_adt.cpp
@@ -149,6 +149,9 @@ namespace ns
#endif
+class empty_adt{};
+BOOST_FUSION_ADAPT_ADT(empty_adt,)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_adt_named.cpp b/libs/fusion/test/sequence/adapt_adt_named.cpp
index 8924ce41cb..f7e115aa8e 100644
--- a/libs/fusion/test/sequence/adapt_adt_named.cpp
+++ b/libs/fusion/test/sequence/adapt_adt_named.cpp
@@ -77,6 +77,10 @@ BOOST_FUSION_ADAPT_ADT_NAMED(
#endif // BOOST_PP_VARIADICS
+
+class empty_adt{};
+BOOST_FUSION_ADAPT_ADT_NAMED(empty_adt,renamed_empty_adt,)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_adt.cpp b/libs/fusion/test/sequence/adapt_assoc_adt.cpp
index a03605f1eb..fca3941dab 100644
--- a/libs/fusion/test/sequence/adapt_assoc_adt.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_adt.cpp
@@ -70,6 +70,9 @@ BOOST_FUSION_ADAPT_ASSOC_ADT(
#endif
+class empty_adt{};
+BOOST_FUSION_ADAPT_ASSOC_ADT(empty_adt,)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_adt_named.cpp b/libs/fusion/test/sequence/adapt_assoc_adt_named.cpp
index 8ef9aa27be..d685528da1 100644
--- a/libs/fusion/test/sequence/adapt_assoc_adt_named.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_adt_named.cpp
@@ -52,6 +52,9 @@ BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED(
(int, int, obj.get_y(), obj.set_y(val), ns::y_member)
)
+class empty_adt{};
+BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED(empty_adt, renamed_empty_adt,)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_struct.cpp b/libs/fusion/test/sequence/adapt_assoc_struct.cpp
index 4cdabb8786..6bb4a8ee43 100644
--- a/libs/fusion/test/sequence/adapt_assoc_struct.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_struct.cpp
@@ -71,6 +71,9 @@ namespace ns
#endif
+struct empty_struct {};
+BOOST_FUSION_ADAPT_ASSOC_STRUCT(empty_struct,);
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_struct_named.cpp b/libs/fusion/test/sequence/adapt_assoc_struct_named.cpp
index f24dadd95b..fd7fdc5075 100644
--- a/libs/fusion/test/sequence/adapt_assoc_struct_named.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_struct_named.cpp
@@ -38,6 +38,9 @@ BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
(int, y, ns::y_member)
)
+struct empty_struct {};
+BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(empty_struct, renamed_empty_struct,);
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_tpl_adt.cpp b/libs/fusion/test/sequence/adapt_assoc_tpl_adt.cpp
index 8aa600ff66..e0b89dcac1 100644
--- a/libs/fusion/test/sequence/adapt_assoc_tpl_adt.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_tpl_adt.cpp
@@ -71,6 +71,20 @@ BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
#endif
+template <typename TypeToConstruct>
+class empty_adt_templated_factory {
+
+ TypeToConstruct operator()() {
+ return TypeToConstruct();
+ }
+
+};
+
+BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
+ (TypeToConstruct),
+ (empty_adt_templated_factory)(TypeToConstruct),
+)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp b/libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp
index 6adcc9312f..a949dad06c 100644
--- a/libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp
+++ b/libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp
@@ -69,6 +69,20 @@ namespace ns
)
#endif
+template <typename TypeToConstruct>
+struct empty_struct_templated_factory {
+
+ TypeToConstruct operator()() {
+ return TypeToConstruct();
+ }
+
+};
+
+BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
+ (TypeToConstruct),
+ (empty_struct_templated_factory)(TypeToConstruct),
+)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_struct.cpp b/libs/fusion/test/sequence/adapt_struct.cpp
index c0cd30494a..e4c8f6ee13 100644
--- a/libs/fusion/test/sequence/adapt_struct.cpp
+++ b/libs/fusion/test/sequence/adapt_struct.cpp
@@ -67,6 +67,17 @@ namespace ns
foo foo_;
int y;
};
+
+
+ // Testing non-constexpr compatible types
+ struct employee {
+ std::string name;
+ std::string nickname;
+
+ employee(std::string name, std::string nickname)
+ : name(name), nickname(nickname)
+ {}
+ };
}
#if BOOST_PP_VARIADICS
@@ -96,6 +107,13 @@ namespace ns
y
)
+ BOOST_FUSION_ADAPT_STRUCT(
+ ns::employee,
+ name,
+ nickname
+ )
+
+
#else // BOOST_PP_VARIADICS
BOOST_FUSION_ADAPT_STRUCT(
@@ -123,8 +141,17 @@ namespace ns
(BOOST_FUSION_ADAPT_AUTO, y)
)
+ BOOST_FUSION_ADAPT_STRUCT(
+ ns::employee,
+ (std::string, name)
+ (BOOST_FUSION_ADAPT_AUTO, nickname)
+ )
+
#endif
+struct empty_struct {};
+BOOST_FUSION_ADAPT_STRUCT(empty_struct,)
+
int
main()
{
@@ -224,6 +251,15 @@ main()
BOOST_TEST(v2 >= v1);
}
+ {
+ ns::employee emp("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ fusion::vector<std::string, std::string> v1("John Doe", "jdoe");
+ BOOST_TEST(emp == v1);
+ }
+
return boost::report_errors();
}
diff --git a/libs/fusion/test/sequence/adapt_struct_named.cpp b/libs/fusion/test/sequence/adapt_struct_named.cpp
index aab11d2dc3..63fc3f5fb1 100644
--- a/libs/fusion/test/sequence/adapt_struct_named.cpp
+++ b/libs/fusion/test/sequence/adapt_struct_named.cpp
@@ -71,6 +71,10 @@ namespace ns
#endif
+struct empty_struct {};
+BOOST_FUSION_ADAPT_STRUCT_NAMED(empty_struct, renamed_empty_struct, )
+BOOST_FUSION_ADAPT_STRUCT_NAMED_NS(empty_struct, (ns1), renamed_empty_struct1, )
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_tpl_adt.cpp b/libs/fusion/test/sequence/adapt_tpl_adt.cpp
index bbd1d07fed..c454baa5af 100644
--- a/libs/fusion/test/sequence/adapt_tpl_adt.cpp
+++ b/libs/fusion/test/sequence/adapt_tpl_adt.cpp
@@ -79,6 +79,20 @@ namespace ns
)
#endif
+template <typename TypeToConstruct>
+class empty_adt_templated_factory {
+
+ TypeToConstruct operator()() {
+ return TypeToConstruct();
+ }
+
+};
+
+BOOST_FUSION_ADAPT_TPL_ADT(
+ (TypeToConstruct),
+ (empty_adt_templated_factory)(TypeToConstruct),
+)
+
int
main()
{
diff --git a/libs/fusion/test/sequence/adapt_tpl_struct.cpp b/libs/fusion/test/sequence/adapt_tpl_struct.cpp
index 86face6d4d..861bab6534 100644
--- a/libs/fusion/test/sequence/adapt_tpl_struct.cpp
+++ b/libs/fusion/test/sequence/adapt_tpl_struct.cpp
@@ -69,6 +69,19 @@ namespace ns
#endif
+template <typename TypeToConstruct>
+struct empty_struct_templated_factory {
+
+ TypeToConstruct operator()() {
+ return TypeToConstruct();
+ }
+
+};
+
+BOOST_FUSION_ADAPT_TPL_STRUCT(
+ (TypeToConstruct),
+ (empty_struct_templated_factory)(TypeToConstruct),
+)
int
main()
diff --git a/libs/fusion/test/sequence/define_struct.cpp b/libs/fusion/test/sequence/define_struct.cpp
index 795fdf6e71..d91dda9526 100644
--- a/libs/fusion/test/sequence/define_struct.cpp
+++ b/libs/fusion/test/sequence/define_struct.cpp
@@ -24,8 +24,23 @@ BOOST_FUSION_DEFINE_STRUCT(
(int, y)
)
+// Tutorial (compile test only)
+BOOST_FUSION_DEFINE_STRUCT(
+ (demo), employee,
+ (std::string, name)
+ (int, age)
+)
+
BOOST_FUSION_DEFINE_STRUCT(BOOST_PP_EMPTY(), s, (int, m))
+// Testing non-constexpr compatible types
+BOOST_FUSION_DEFINE_STRUCT(
+ (ns),
+ employee,
+ (std::string, name)
+ (std::string, nickname)
+)
+
int
main()
{
@@ -100,6 +115,13 @@ main()
BOOST_TEST(p == make_vector(3,5));
}
+ {
+ ns::employee emp = make_list("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ BOOST_TEST(emp == make_vector("John Doe", "jdoe"));
+ }
+
return boost::report_errors();
}
-
diff --git a/libs/fusion/test/sequence/define_struct_inline.cpp b/libs/fusion/test/sequence/define_struct_inline.cpp
index e849ce9b15..d34a142b31 100644
--- a/libs/fusion/test/sequence/define_struct_inline.cpp
+++ b/libs/fusion/test/sequence/define_struct_inline.cpp
@@ -41,6 +41,13 @@ namespace ns
BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m))
BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct, )
+
+ // Testing non-constexpr compatible types
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(
+ employee,
+ (std::string, name)
+ (std::string, nickname)
+ )
}
template <typename Point>
@@ -128,6 +135,17 @@ main()
{
run_test<cls::point>(); // test with non-template enclosing class
run_test<tpl_cls<>::point>(); // test with template enclosing class
+
+ {
+ using namespace boost::fusion;
+
+ ns::employee emp = make_list("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ BOOST_TEST(emp == make_vector("John Doe", "jdoe"));
+ }
+
return boost::report_errors();
}
diff --git a/libs/fusion/test/sequence/deque_nest.cpp b/libs/fusion/test/sequence/deque_nest.cpp
new file mode 100644
index 0000000000..6f70ee9ad0
--- /dev/null
+++ b/libs/fusion/test/sequence/deque_nest.cpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (C) 2015 Kohei Takahshi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/fusion/container/deque/deque.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+#define FUSION_SEQUENCE deque
+#include "nest.hpp"
+
+int
+main()
+{
+ test();
+ return boost::report_errors();
+}
+
diff --git a/libs/fusion/test/sequence/iterator.hpp b/libs/fusion/test/sequence/iterator.hpp
index d9ef5e0fca..d543f8eb31 100644
--- a/libs/fusion/test/sequence/iterator.hpp
+++ b/libs/fusion/test/sequence/iterator.hpp
@@ -164,9 +164,11 @@ void test()
BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::deref<i0>::type, int&>::value));
BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::deref<i1>::type, char&>::value));
+ BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::deref<i2>::type, char&>::value));
BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::value_of<i0>::type, int>::value));
BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::value_of<i1>::type, char&>::value));
+ BOOST_STATIC_ASSERT((is_same<boost::fusion::result_of::value_of<i2>::type, char&>::value));
}
{ // Testing advance
diff --git a/libs/fusion/test/sequence/list_nest.cpp b/libs/fusion/test/sequence/list_nest.cpp
new file mode 100644
index 0000000000..ff97b80737
--- /dev/null
+++ b/libs/fusion/test/sequence/list_nest.cpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (C) 2015 Kohei Takahshi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/fusion/container/list/list.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+#define FUSION_SEQUENCE list
+#include "nest.hpp"
+
+int
+main()
+{
+ test();
+ return boost::report_errors();
+}
+
diff --git a/libs/fusion/test/sequence/map.cpp b/libs/fusion/test/sequence/map.cpp
index 8dada16756..5a130f8b3e 100644
--- a/libs/fusion/test/sequence/map.cpp
+++ b/libs/fusion/test/sequence/map.cpp
@@ -111,6 +111,7 @@ main()
pair<int, char> a = at_c<0>(m); (void) a;
pair<double, std::string> b = at_c<1>(m);
pair<abstract, int> c = at_c<2>(m);
+ (void)c;
}
// iterators & random access interface.
@@ -154,6 +155,7 @@ main()
// make sure that the correct constructor is called
pair<int, copy_all> p1;
pair<int, copy_all> p2 = p1;
+ (void)p2;
}
{
diff --git a/libs/fusion/test/sequence/nest.hpp b/libs/fusion/test/sequence/nest.hpp
new file mode 100644
index 0000000000..e8087320ff
--- /dev/null
+++ b/libs/fusion/test/sequence/nest.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+ Copyright (C) 2015 Kohei Takahshi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#include <utility>
+#include <boost/config.hpp>
+
+template <typename C>
+void test_copy()
+{
+ C src;
+ C dst = src;
+ (void)dst;
+}
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+template <typename C>
+void test_move()
+{
+ C src;
+ C dst = std::move(src);
+ (void)dst;
+}
+#endif
+
+template <typename C>
+void test_all()
+{
+ test_copy<C>();
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ test_move<C>();
+#endif
+}
+
+void
+test()
+{
+ using namespace boost::fusion;
+
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<> > >();
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<>, int> >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<> > >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<>, float> >();
+
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int> > >();
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int>, int> >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int> > >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int>, float> >();
+
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int, float> > >();
+ test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int, float>, int> >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int, float> > >();
+ test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int, float>, float> >();
+}
+
diff --git a/libs/fusion/test/sequence/tuple_nest.cpp b/libs/fusion/test/sequence/tuple_nest.cpp
new file mode 100644
index 0000000000..1d263da4ff
--- /dev/null
+++ b/libs/fusion/test/sequence/tuple_nest.cpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (C) 2015 Kohei Takahshi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/fusion/tuple/tuple.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+#define FUSION_SEQUENCE tuple
+#include "nest.hpp"
+
+int
+main()
+{
+ test();
+ return boost::report_errors();
+}
+
diff --git a/libs/fusion/test/sequence/vector_nest.cpp b/libs/fusion/test/sequence/vector_nest.cpp
new file mode 100644
index 0000000000..a0cb76c6af
--- /dev/null
+++ b/libs/fusion/test/sequence/vector_nest.cpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (C) 2015 Kohei Takahshi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+#define FUSION_SEQUENCE vector
+#include "nest.hpp"
+
+int
+main()
+{
+ test();
+ return boost::report_errors();
+}
+
diff --git a/libs/fusion/test/support/index_sequence.cpp b/libs/fusion/test/support/index_sequence.cpp
new file mode 100644
index 0000000000..f155a8c7d4
--- /dev/null
+++ b/libs/fusion/test/support/index_sequence.cpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2015 Kohei Takahashi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/fusion/support/detail/index_sequence.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+using namespace boost::fusion;
+
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<0>::type, detail::index_sequence<> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<1>::type, detail::index_sequence<0> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<2>::type, detail::index_sequence<0, 1> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<3>::type, detail::index_sequence<0, 1, 2> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<4>::type, detail::index_sequence<0, 1, 2, 3> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<5>::type, detail::index_sequence<0, 1, 2, 3, 4> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<6>::type, detail::index_sequence<0, 1, 2, 3, 4, 5> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<7>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<8>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7> >));
+
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<15>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<16>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15> >));
+BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<17>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16> >));
+
+#endif
+
diff --git a/libs/fusion/test/support/pair_nest.cpp b/libs/fusion/test/support/pair_nest.cpp
new file mode 100644
index 0000000000..fbc253cbe2
--- /dev/null
+++ b/libs/fusion/test/support/pair_nest.cpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2015 Kohei Takahashi
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/core/ignore_unused.hpp>
+#include <boost/fusion/support/pair.hpp>
+
+using namespace boost::fusion;
+
+template <typename C>
+void copy()
+{
+ pair<int, C> src;
+ pair<int, C> dest = src;
+ boost::ignore_unused(dest);
+}
+
+int main()
+{
+ copy<pair<void, float> >();
+}
+