summaryrefslogtreecommitdiff
path: root/boost/fusion/container/list/detail/list_to_cons.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/container/list/detail/list_to_cons.hpp')
-rw-r--r--boost/fusion/container/list/detail/list_to_cons.hpp89
1 files changed, 37 insertions, 52 deletions
diff --git a/boost/fusion/container/list/detail/list_to_cons.hpp b/boost/fusion/container/list/detail/list_to_cons.hpp
index bc8718631c..1ce1cfbafb 100644
--- a/boost/fusion/container/list/detail/list_to_cons.hpp
+++ b/boost/fusion/container/list/detail/list_to_cons.hpp
@@ -1,76 +1,61 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2014-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)
==============================================================================*/
-#if !defined(FUSION_LIST_TO_CONS_07172005_1041)
-#define FUSION_LIST_TO_CONS_07172005_1041
+#ifndef FUSION_LIST_MAIN_10262014_0447
+#define FUSION_LIST_MAIN_10262014_0447
+#include <boost/config.hpp>
#include <boost/fusion/support/config.hpp>
-#include <boost/fusion/container/list/cons.hpp>
-#include <boost/fusion/container/list/limits.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-
-#define FUSION_VOID(z, n, _) void_
-
-namespace boost { namespace fusion
-{
- struct nil_;
- struct void_;
-}}
+#include <boost/fusion/container/list/list_fwd.hpp>
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/list/detail/preprocessed/list_to_cons.hpp>
+///////////////////////////////////////////////////////////////////////////////
+// Without variadics, we will use the PP version
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_FUSION_HAS_VARIADIC_LIST)
+# include <boost/fusion/container/list/detail/cpp03/list_to_cons.hpp>
#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/list_to_cons" FUSION_MAX_LIST_SIZE_STR ".hpp")
-#endif
-/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
+///////////////////////////////////////////////////////////////////////////////
+// C++11 interface
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/support/detail/access.hpp>
- 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)
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename ...T>
+ struct list_to_cons;
- This is an auto-generated file. Do not edit!
-==============================================================================*/
+ template <>
+ struct list_to_cons<>
+ {
+ typedef nil_ type;
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ static type call() { return type(); }
+ };
-namespace boost { namespace fusion { namespace detail
-{
- template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename T)>
- struct list_to_cons
+ template <typename Head, typename ...Tail>
+ struct list_to_cons<Head, Tail...>
{
- typedef T0 head_type;
- typedef list_to_cons<
- BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_LIST_SIZE, T), void_>
- tail_list_to_cons;
+ typedef Head head_type;
+ typedef list_to_cons<Tail...> tail_list_to_cons;
typedef typename tail_list_to_cons::type tail_type;
typedef cons<head_type, tail_type> type;
- #include <boost/fusion/container/list/detail/list_to_cons_call.hpp>
- };
-
- template <>
- struct list_to_cons<BOOST_PP_ENUM(FUSION_MAX_LIST_SIZE, FUSION_VOID, _)>
- {
- typedef nil_ type;
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ static type
+ call(typename detail::call_param<Head>::type _h,
+ typename detail::call_param<Tail>::type ..._t)
+ {
+ return type(_h, tail_list_to_cons::call(_t...));
+ }
};
}}}
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#undef FUSION_VOID
#endif