diff options
Diffstat (limited to 'boost/fusion/container/list/detail/list_to_cons.hpp')
-rw-r--r-- | boost/fusion/container/list/detail/list_to_cons.hpp | 89 |
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 |