$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r73927 - in trunk/boost/fusion: container/vector iterator/detail sequence/intrinsic/detail support/detail view/iterator_range/detail view/joint_view
From: eric_at_[hidden]
Date: 2011-08-19 14:41:13
Author: eric_niebler
Date: 2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
New Revision: 73927
URL: http://svn.boost.org/trac/boost/changeset/73927
Log:
bug fixes to segmented fusion support, more fwd headers
Added:
   trunk/boost/fusion/container/vector/vector10_fwd.hpp   (contents, props changed)
   trunk/boost/fusion/container/vector/vector20_fwd.hpp   (contents, props changed)
   trunk/boost/fusion/container/vector/vector30_fwd.hpp   (contents, props changed)
   trunk/boost/fusion/container/vector/vector40_fwd.hpp   (contents, props changed)
   trunk/boost/fusion/container/vector/vector50_fwd.hpp   (contents, props changed)
   trunk/boost/fusion/view/joint_view/joint_view_fwd.hpp   (contents, props changed)
Text files modified: 
   trunk/boost/fusion/container/vector/vector10.hpp                           |     3 +                                       
   trunk/boost/fusion/container/vector/vector20.hpp                           |     1                                         
   trunk/boost/fusion/container/vector/vector30.hpp                           |     1                                         
   trunk/boost/fusion/container/vector/vector40.hpp                           |     1                                         
   trunk/boost/fusion/container/vector/vector50.hpp                           |     1                                         
   trunk/boost/fusion/container/vector/vector_fwd.hpp                         |     5 ++                                      
   trunk/boost/fusion/iterator/detail/segmented_iterator.hpp                  |    73 +++++++++++++++++++++++++++++++++++++-- 
   trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp           |     5 ++                                      
   trunk/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp            |     2                                         
   trunk/boost/fusion/support/detail/segmented_fold_until_impl.hpp            |    15 +++++--                                 
   trunk/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp |    24 +++++++------                           
   trunk/boost/fusion/view/joint_view/joint_view.hpp                          |     1                                         
   12 files changed, 110 insertions(+), 22 deletions(-)
Modified: trunk/boost/fusion/container/vector/vector10.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector10.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector10.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_VECTOR10_05042005_0257)
 #define FUSION_VECTOR10_05042005_0257
 
+#include <boost/fusion/container/vector/vector10_fwd.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/iterator/next.hpp>
@@ -39,7 +40,7 @@
     struct fusion_sequence_tag;
     struct random_access_traversal_tag;
 
-    template <typename Dummy = void>
+    template <typename Dummy>
     struct vector0 : sequence_base<vector0<Dummy> >
     {
         typedef mpl::vector0<> types;
Added: trunk/boost/fusion/container/vector/vector10_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/vector/vector10_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,34 @@
+#ifndef BOOST_PP_IS_ITERATING
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+namespace boost { namespace fusion
+{
+    template <typename Dummy = void>
+    struct vector0;
+
+    // expand vector1 to vector10
+    #define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/vector10_fwd.hpp>
+    #define BOOST_PP_ITERATION_LIMITS (1, 10)
+    #include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
+#else
+
+    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename T)>
+    struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION());
+
+#endif
Modified: trunk/boost/fusion/container/vector/vector20.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector20.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector20.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_VECTOR20_05052005_0205)
 #define FUSION_VECTOR20_05052005_0205
 
+#include <boost/fusion/container/vector/vector20_fwd.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/iterator/next.hpp>
Added: trunk/boost/fusion/container/vector/vector20_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/vector/vector20_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,31 @@
+#ifndef BOOST_PP_IS_ITERATING
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+namespace boost { namespace fusion
+{
+    // expand vector11 to vector20
+    #define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/vector20_fwd.hpp>
+    #define BOOST_PP_ITERATION_LIMITS (11, 20)
+    #include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
+#else
+
+    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename T)>
+    struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION());
+
+#endif
Modified: trunk/boost/fusion/container/vector/vector30.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector30.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector30.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_VECTOR30_05052005_0206)
 #define FUSION_VECTOR30_05052005_0206
 
+#include <boost/fusion/container/vector/vector30_fwd.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/iterator/next.hpp>
Added: trunk/boost/fusion/container/vector/vector30_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/vector/vector30_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,31 @@
+#ifndef BOOST_PP_IS_ITERATING
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+namespace boost { namespace fusion
+{
+    // expand vector21 to vector30
+    #define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/vector30_fwd.hpp>
+    #define BOOST_PP_ITERATION_LIMITS (21, 30)
+    #include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
+#else
+
+    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename T)>
+    struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION());
+
+#endif
Modified: trunk/boost/fusion/container/vector/vector40.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector40.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector40.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_VECTOR40_05052005_0208)
 #define FUSION_VECTOR40_05052005_0208
 
+#include <boost/fusion/container/vector/vector40_fwd.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/iterator/next.hpp>
Added: trunk/boost/fusion/container/vector/vector40_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/vector/vector40_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,31 @@
+#ifndef BOOST_PP_IS_ITERATING
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+namespace boost { namespace fusion
+{
+    // expand vector31 to vector40
+    #define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/vector40_fwd.hpp>
+    #define BOOST_PP_ITERATION_LIMITS (31, 40)
+    #include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
+#else
+
+    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename T)>
+    struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION());
+
+#endif
Modified: trunk/boost/fusion/container/vector/vector50.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector50.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector50.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_VECTOR50_05052005_0207)
 #define FUSION_VECTOR50_05052005_0207
 
+#include <boost/fusion/container/vector/vector50_fwd.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/iterator/next.hpp>
Added: trunk/boost/fusion/container/vector/vector50_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/vector/vector50_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,31 @@
+#ifndef BOOST_PP_IS_ITERATING
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+namespace boost { namespace fusion
+{
+    // expand vector41 to vector50
+    #define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/vector50_fwd.hpp>
+    #define BOOST_PP_ITERATION_LIMITS (41, 50)
+    #include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
+#else
+
+    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename T)>
+    struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION());
+
+#endif
Modified: trunk/boost/fusion/container/vector/vector_fwd.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector_fwd.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -10,6 +10,11 @@
 
 #include <boost/fusion/container/vector/limits.hpp>
 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/fusion/container/vector/vector10_fwd.hpp>
+#include <boost/fusion/container/vector/vector20_fwd.hpp>
+#include <boost/fusion/container/vector/vector30_fwd.hpp>
+#include <boost/fusion/container/vector/vector40_fwd.hpp>
+#include <boost/fusion/container/vector/vector50_fwd.hpp>
 
 namespace boost { namespace fusion
 {
Modified: trunk/boost/fusion/iterator/detail/segmented_iterator.hpp
==============================================================================
--- trunk/boost/fusion/iterator/detail/segmented_iterator.hpp	(original)
+++ trunk/boost/fusion/iterator/detail/segmented_iterator.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -10,6 +10,10 @@
 #include <boost/fusion/sequence/intrinsic_fwd.hpp>
 #include <boost/fusion/iterator/iterator_facade.hpp>
 #include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/deref_data.hpp>
+#include <boost/fusion/iterator/key_of.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/value_of_data.hpp>
 #include <boost/fusion/iterator/detail/segmented_equal_to.hpp>
 #include <boost/fusion/container/list/detail/reverse_cons.hpp>
 
@@ -26,7 +30,7 @@
     // A segmented iterator wraps a "context", which is a cons list
     // of ranges, the frontmost is range over values and the rest
     // are ranges over internal segments.
-    template<typename Context>
+    template <typename Context>
     struct segmented_iterator
       : iterator_facade<segmented_iterator<Context>, forward_traversal_tag>
     {
@@ -38,7 +42,7 @@
         //{
         //  return deref(begin(car(it.context)))
         //}
-        template<typename It>
+        template <typename It>
         struct deref
         {
             typedef
@@ -53,9 +57,70 @@
             }
         };
 
+        //auto deref_data(it)
+        //{
+        //  return deref_data(begin(car(it.context)))
+        //}
+        template <typename It>
+        struct deref_data
+        {
+            typedef
+                typename result_of::deref_data<
+                    typename It::context_type::car_type::begin_type
+                >::type
+            type;
+
+            static type call(It const& it)
+            {
+                return fusion::deref_data(it.context.car.first);
+            }
+        };
+
+        //auto key_of(it)
+        //{
+        //  return key_of(begin(car(it.context)))
+        //}
+        template <typename It>
+        struct key_of
+        {
+            typedef
+                typename result_of::key_of<
+                    typename It::context_type::car_type::begin_type
+                >::type
+            type;
+        };
+
+        //auto value_of(it)
+        //{
+        //  return value_of(begin(car(it.context)))
+        //}
+        template <typename It>
+        struct value_of
+        {
+            typedef
+                typename result_of::value_of<
+                    typename It::context_type::car_type::begin_type
+                >::type
+            type;
+        };
+
+        //auto value_of_data(it)
+        //{
+        //  return value_of_data(begin(car(it.context)))
+        //}
+        template <typename It>
+        struct value_of_data
+        {
+            typedef
+                typename result_of::value_of_data<
+                    typename It::context_type::car_type::begin_type
+                >::type
+            type;
+        };
+
         // Compare all the segment iterators in each stack, starting with
         // the bottom-most.
-        template<typename It1, typename It2>
+        template <typename It1, typename It2>
         struct equal_to
           : detail::segmented_equal_to<
                 typename detail::reverse_cons<typename It1::context_type>::type,
@@ -63,7 +128,7 @@
             >
         {};
 
-        template<typename It>
+        template <typename It>
         struct next
         {
             typedef detail::segmented_next_impl<typename It::context_type> impl;
Modified: trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
==============================================================================
--- trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp	(original)
+++ trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -9,6 +9,11 @@
 
 #include <boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp>
 #include <boost/fusion/iterator/segmented_iterator.hpp>
+#include <boost/fusion/view/iterator_range.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/container/list/cons.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
Modified: trunk/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
==============================================================================
--- trunk/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp	(original)
+++ trunk/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -35,7 +35,7 @@
                 >::type
             >::type
           , mpl::size_t<0>
-          , mpl::plus<mpl::_1, segmented_size<mpl::_2> >
+          , mpl::plus<mpl::_1, segmented_size<remove_reference<mpl::_2> > >
         >::type
     {};
 
Modified: trunk/boost/fusion/support/detail/segmented_fold_until_impl.hpp
==============================================================================
--- trunk/boost/fusion/support/detail/segmented_fold_until_impl.hpp	(original)
+++ trunk/boost/fusion/support/detail/segmented_fold_until_impl.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -17,7 +17,6 @@
 #include <boost/fusion/support/void.hpp>
 #include <boost/fusion/container/list/cons_fwd.hpp>
 #include <boost/fusion/sequence/intrinsic_fwd.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
@@ -83,9 +82,7 @@
           , typename State
           , typename Context
           , typename Fun
-          , bool IsEmpty = result_of::empty<
-                typename result_of::value_of<Begin>::type
-            >::type::value
+          , bool IsEmpty
         >
         struct segmented_fold_until_iterate_skip_empty;
 
@@ -331,7 +328,15 @@
         struct segmented_fold_until_iterate
         {
             typedef
-                segmented_fold_until_iterate_skip_empty<Begin, End, State, Context, Fun>
+                typename result_of::empty<
+                    typename remove_reference<
+                        typename result_of::deref<Begin>::type
+                    >::type
+                >::type
+            empty_type;
+
+            typedef
+                segmented_fold_until_iterate_skip_empty<Begin, End, State, Context, Fun, empty_type::value>
             impl;
             
             typedef typename impl::type type;
Modified: trunk/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp
==============================================================================
--- trunk/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp	(original)
+++ trunk/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -122,7 +122,7 @@
             >
         type;
 
-        static type call(Stack stack)
+        static type call(Stack const& stack)
         {
             //return segment_sequence(
             //  push_front(
@@ -168,7 +168,7 @@
             >
         type;
 
-        static type call(Stack stack)
+        static type call(Stack const& stack)
         {
             // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin))));
             return type(stack.cdr.car.first, fusion::end(*stack.car.first));
@@ -178,10 +178,11 @@
     template <typename Stack>
     struct make_segment_sequence_front<Stack, 1>
     {
-        typedef nil type;
-        static type call(Stack const &)
+        typedef typename Stack::cdr_type type; // nil
+
+        static type call(Stack const &stack)
         {
-            return nil();
+            return stack.cdr;
         }
     };    
 
@@ -264,7 +265,7 @@
             >
         type;
 
-        static type call(Stack stack)
+        static type call(Stack const& stack)
         {
             //  return segment_sequence(
             //    push_back(
@@ -310,7 +311,7 @@
             >
         type;
 
-        static type call(Stack stack)
+        static type call(Stack const& stack)
         {
             // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end))));
             return type(fusion::begin(*stack.car.first), stack.cdr.car.first);
@@ -320,10 +321,11 @@
     template <typename Stack>
     struct make_segment_sequence_back<Stack, 1>
     {
-        typedef nil type;
-        static type call(Stack const &)
+        typedef typename Stack::cdr_type type; // nil
+
+        static type call(Stack const& stack)
         {
-            return nil();
+            return stack.cdr;
         }
     };
     
@@ -490,7 +492,7 @@
 
         typedef typename impl::type type;
 
-        static type call(Begin const & begin, End const & end)
+        static type call(Begin const& begin, End const& end)
         {
             return impl::call(
                 reverse_begin_cons::call(begin.context)
Modified: trunk/boost/fusion/view/joint_view/joint_view.hpp
==============================================================================
--- trunk/boost/fusion/view/joint_view/joint_view.hpp	(original)
+++ trunk/boost/fusion/view/joint_view/joint_view.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -7,6 +7,7 @@
 #if !defined(FUSION_JOINT_VIEW_07162005_0140)
 #define FUSION_JOINT_VIEW_07162005_0140
 
+#include <boost/fusion/view/joint_view/joint_view_fwd.hpp>
 #include <boost/fusion/support/detail/access.hpp>
 #include <boost/fusion/support/is_view.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
Added: trunk/boost/fusion/view/joint_view/joint_view_fwd.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/view/joint_view/joint_view_fwd.hpp	2011-08-19 14:41:11 EDT (Fri, 19 Aug 2011)
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED)
+#define BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED
+
+namespace boost { namespace fusion
+{
+    struct joint_view_tag;
+
+    template <typename Sequence1, typename Sequence2>
+    struct joint_view;
+}}
+
+#endif