]> git.donarmstrong.com Git - rsem.git/blobdiff - boost/fusion/iterator/value_of.hpp
Updated boost to v1.55.0
[rsem.git] / boost / fusion / iterator / value_of.hpp
diff --git a/boost/fusion/iterator/value_of.hpp b/boost/fusion/iterator/value_of.hpp
new file mode 100644 (file)
index 0000000..fe0cd56
--- /dev/null
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    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(FUSION_VALUE_OF_05052005_1126)
+#define FUSION_VALUE_OF_05052005_1126
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl
+        {
+            template <typename Iterator>
+            struct apply {};
+        };
+
+        template <>
+        struct value_of_impl<iterator_facade_tag>
+        {
+            template <typename Iterator>
+            struct apply : Iterator::template value_of<Iterator> {};
+        };
+
+        template <>
+        struct value_of_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct value_of_impl<mpl_iterator_tag>;
+
+        template <>
+        struct value_of_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Iterator>
+        struct value_of
+            : extension::value_of_impl<typename detail::tag_of<Iterator>::type>::
+                template apply<Iterator>
+        {};
+    }
+}}
+
+#endif