Squashed 'third_party/boostorg/range/' content from commit 4cfd4d8

Change-Id: I641c49f21039952b16f888223a952503e43a28a9
git-subtree-dir: third_party/boostorg/range
git-subtree-split: 4cfd4d8287ca949d7f29256adf3e796a0d1775ec
diff --git a/include/boost/range/detail/combine_rvalue.hpp b/include/boost/range/detail/combine_rvalue.hpp
new file mode 100644
index 0000000..2e323b7
--- /dev/null
+++ b/include/boost/range/detail/combine_rvalue.hpp
@@ -0,0 +1,32 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2014. Use, modification and
+//  distribution is subject to 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#define BOOST_RANGE_combined_args(z, n, i) \
+    BOOST_PP_CAT(R, n)&& BOOST_PP_CAT(r, n)
+
+#define BOOST_RANGE_combined_range_iterator(z, n, i) \
+    typename range_iterator< \
+        typename remove_reference<BOOST_PP_CAT(R,n)>::type \
+  >::type
+
+
+#define BOOST_RANGE_combine(z, n, data) \
+    template <BOOST_PP_ENUM_PARAMS(n, typename R)> \
+    inline range::combined_range< \
+        tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~)> \
+    > \
+    combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, ~)) \
+    { \
+        typedef tuple< \
+            BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~) \
+        > rng_tuple_t; \
+        return range::combined_range<rng_tuple_t>( \
+            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \
+            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \
+    }