$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57282 - in sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail: . pp
From: mr.chr.schmidt_at_[hidden]
Date: 2009-11-01 19:44:10
Author: cschmidt
Date: 2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
New Revision: 57282
URL: http://svn.boost.org/trac/boost/changeset/57282
Log:
spirit fixes (6)
Added:
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/advance_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/deref_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/distance_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/equal_to_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/next_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_fwd.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_iterator.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/prior_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_of_impl.hpp   (contents, props changed)
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/advance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/advance_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_ADVANCE_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_ADVANCE_IMPL_HPP
+
+#include <boost/mpl/advance.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct advance_impl;
+
+    template<>
+    struct advance_impl<nview_iterator_tag>
+    {
+        template<typename It, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+
+            typedef
+                nview_iterator<
+                    typename it::seq_type
+                  , typename mpl::advance<typename it::pos_type, N>::type
+                >
+            type;
+
+            static type
+            call(It it)
+            {
+                return type(it.seq);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_AT_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct at_impl;
+
+    template<>
+    struct at_impl<nview_tag>
+    {
+        template<typename Seq, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+            typedef typename mpl::at<typename seq::indices, N>::type index;
+
+            typedef typename
+                result_of::at<typename seq::seq_type,index>::type
+            type;
+
+            static type
+            call(Seq seq)
+            {
+                return fusion::at<index>(seq.seq.get());
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_BEGIN_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_BEGIN_IMPL_HPP
+
+#include <boost/mpl/begin.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct begin_impl;
+
+    template<>
+    struct begin_impl<nview_tag>
+    {
+        template<typename Seq>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
+            typedef
+                nview_iterator<
+                    typename detail::add_lref<
+                        typename seq::storage_type::type
+                    >::type
+                  , typename mpl::begin<typename seq::indices>::type
+                >
+            type;
+
+            static type
+            call(Seq seq)
+            {
+                return type(seq.seq.get());
+            }
+        };
+    };
+}}}
+
+#endif
+
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/deref_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_DEREF_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_DEREF_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct deref_impl;
+
+    template<>
+    struct deref_impl<nview_iterator_tag>
+    {
+        template<typename It>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+            typedef typename mpl::deref<typename it::pos_type>::type index;
+
+            typedef typename
+                result_of::at<typename it::seq_type, index>::type
+            type;
+
+            static type
+            call(It it)
+            {
+                return fusion::at<index>(it.seq);
+            }
+        };
+    };
+}}}
+
+#endif
+
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/distance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/distance_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_DISTANCE_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_DISTANCE_IMPL_HPP
+
+#include <boost/mpl/distance.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct distance_impl;
+
+    template<>
+    struct distance_impl<nview_iterator_tag>
+    {
+        template<typename It1, typename It2>
+        struct apply
+          : mpl::distance<
+                typename detail::remove_reference<It1>::type::pos_type
+              , typename detail::remove_reference<It2>::type::pos_type
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_END_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_END_IMPL_HPP
+
+#include <boost/mpl/end.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct end_impl;
+
+    template<>
+    struct end_impl<nview_tag>
+    {
+        template<typename Seq>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
+            typedef
+                nview_iterator<
+                    typename detail::add_lref<
+                        typename seq::storage_type::type
+                    >::type
+                  , typename mpl::end<typename seq::indices>::type
+                >
+            type;
+
+            static type
+            call(Seq seq)
+            {
+                return type(seq.seq.get());
+            }
+        };
+    };
+}}}
+
+#endif
+
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/equal_to_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/equal_to_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_EQUAL_TO_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_EQUAL_TO_IMPL_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct equal_to_impl;
+
+    template<>
+    struct equal_to_impl<nview_iterator_tag>
+    {
+        template<typename It1, typename It2>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It1>::type it1;
+            typedef typename detail::remove_reference<It2>::type it2;
+
+            typedef
+                mpl::and_<
+                    is_same<
+                        typename detail::identity<typename it1::seq_type>::type
+                      , typename detail::identity<typename it2::seq_type>::type
+                    >
+                  , mpl::equal_to<
+                        typename it1::pos_type
+                      , typename it2::pos_type
+                    >
+                >
+            type;
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/next_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/next_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_NEXT_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_NEXT_IMPL_HPP
+
+#include <boost/mpl/next.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename Tag>
+    struct next_impl;
+
+    template <>
+    struct next_impl<nview_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+
+            typedef
+                nview_iterator<
+                    typename it::seq_type,
+                    typename mpl::next<typename it::pos_type>::type
+                >
+            type;
+
+            static type
+            call(It it)
+            {
+                return type(it.seq);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_fwd.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_NVIEW_FWD_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_NVIEW_FWD_HPP
+
+namespace boost { namespace fusion
+{
+    struct nview_tag;
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/nview_iterator.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+    Copyright (c) 2009 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_NVIEW_ITERATOR_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_NVIEW_ITERATOR_HPP
+
+#include <boost/fusion/support/iterator_base.hpp>
+
+namespace boost { namespace fusion
+{
+    struct nview_iterator_tag;
+
+    template<typename SeqRef, typename Pos>
+    struct nview_iterator
+      : iterator_base<nview_iterator<SeqRef, Pos> >
+    {
+        typedef SeqRef seq_type;
+        typedef Pos pos_type;
+
+        typedef nview_iterator_tag fusion_tag;
+        typedef random_access_traversal_tag category;
+
+        explicit
+        nview_iterator(SeqRef seq)
+          : seq(seq)
+        {}
+
+        SeqRef seq;
+    };
+
+}}
+
+#endif
+
+
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,102 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+    Copyright (c) 2009 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        template<
+            typename Seq
+#if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I)
+#endif
+        >
+        struct as_nview
+#if BOOST_FUSION_N!=FUSION_MAX_VECTOR_SIZE
+        <
+            Seq
+#   if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+        >
+#endif
+        {
+            typedef
+                nview<
+                    Seq
+                  , mpl::BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_FUSION_N),_c)<
+                        int
+#if BOOST_FUSION_N
+                      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+                    >
+                >
+            type;
+        };
+    }
+
+    template<
+#if BOOST_FUSION_N
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+#endif
+        typename Seq
+    >
+    typename result_of::as_nview<
+        BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+    >::type
+    as_nview(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return typename result_of::as_nview<
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+            >::type(BOOST_FUSION_FORWARD(Seq,seq));
+    }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template<
+#   if BOOST_FUSION_N
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+#   endif
+        typename Seq
+    >
+//cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+#   if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+    typename lazy_disable_if<
+        is_const<Seq>
+      , result_of::as_nview<
+            Seq&
+#   if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+        >
+    >::type
+#   else
+    typename result_of::as_nview<
+        Seq&
+#       if BOOST_FUSION_N
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#       endif
+    >::type
+#   endif
+    as_nview(Seq& seq)
+    {
+        return typename result_of::as_nview<
+                Seq&
+#   if BOOST_FUSION_N
+              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+            >::type(seq);
+    }
+#endif
+
+#undef BOOST_FUSION_N
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/prior_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/prior_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_PRIOR_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_PRIOR_IMPL_HPP
+
+#include <boost/mpl/prior.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename Tag>
+    struct prior_impl;
+
+    template <>
+    struct prior_impl<nview_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+
+            typedef
+                nview_iterator<
+                    typename it::seq_type,
+                    typename mpl::prior<typename it::pos_type>::type
+                >
+            type;
+
+            static type
+            call(It it)
+            {
+                return type(it.seq);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_at_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_SIZE_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_SIZE_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct value_at_impl;
+
+    template<>
+    struct value_at_impl<nview_tag>
+    {
+        template<typename Seq, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
+            typedef typename
+                result_of::value_at<
+                    typename seq::seq_type
+                  , typename mpl::at<typename seq::indices, N>::type
+                >::type
+            type;
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/value_of_impl.hpp	2009-11-01 19:44:07 EST (Sun, 01 Nov 2009)
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_NVIEW_DETAIL_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_VIEW_NVIEW_DETAIL_VALUE_OF_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct value_of_impl;
+
+    template<>
+    struct value_of_impl<nview_iterator_tag>
+    {
+        template<typename It>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+
+            typedef typename
+                result_of::value_at<
+                    typename it::seq_type
+                  , typename mpl::deref<typename it::pos_type>::type
+                >::type
+            type;
+        };
+    };
+}}}
+
+#endif