EVOLUTION-MANAGER
Edit File: list.hpp
/*============================================================================= 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) ==============================================================================*/ #ifndef FUSION_LIST_10262014_0537 #define FUSION_LIST_10262014_0537 #include <boost/fusion/support/config.hpp> #include <boost/fusion/container/list/list_fwd.hpp> /////////////////////////////////////////////////////////////////////////////// // Without variadics, we will use the PP version /////////////////////////////////////////////////////////////////////////////// #if !defined(BOOST_FUSION_HAS_VARIADIC_LIST) # include <boost/fusion/container/list/detail/cpp03/list.hpp> #else /////////////////////////////////////////////////////////////////////////////// // C++11 interface /////////////////////////////////////////////////////////////////////////////// #include <utility> #include <boost/fusion/container/list/detail/list_to_cons.hpp> namespace boost { namespace fusion { struct nil_; template <> struct list<> : detail::list_to_cons<>::type { private: typedef detail::list_to_cons<> list_to_cons; typedef list_to_cons::type inherited_type; public: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED list() : inherited_type() {} #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) template <typename Sequence> BOOST_FUSION_GPU_ENABLED list(Sequence const& rhs) : inherited_type(rhs) {} template <typename Sequence> BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED list& operator=(Sequence const& rhs) { inherited_type::operator=(rhs); return *this; } #else template <typename Sequence> BOOST_FUSION_GPU_ENABLED list(Sequence&& rhs) : inherited_type(std::forward<Sequence>(rhs)) {} template <typename Sequence> BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED list& operator=(Sequence&& rhs) { inherited_type::operator=(std::forward<Sequence>(rhs)); return *this; } #endif }; template <typename ...T> struct list : detail::list_to_cons<T...>::type { private: typedef detail::list_to_cons<T...> list_to_cons; typedef typename list_to_cons::type inherited_type; public: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED list() : inherited_type() {} #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) template <typename Sequence> BOOST_FUSION_GPU_ENABLED list(Sequence const& rhs) : inherited_type(rhs) {} #else template <typename Sequence> BOOST_FUSION_GPU_ENABLED list(Sequence&& rhs) : inherited_type(std::forward<Sequence>(rhs)) {} #endif BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED explicit list(typename detail::call_param<T>::type ...args) : inherited_type(list_to_cons::call(args...)) {} #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) template <typename Sequence> BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED list& operator=(Sequence const& rhs) { inherited_type::operator=(rhs); return *this; } #else template <typename Sequence> BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED list& operator=(Sequence&& rhs) { inherited_type::operator=(std::forward<Sequence>(rhs)); return *this; } #endif }; }} #endif #endif