]> git.lyx.org Git - lyx.git/blob - 3rdparty/boost/boost/fusion/container/list/list.hpp
Update to boost 1.72
[lyx.git] / 3rdparty / boost / boost / fusion / container / list / list.hpp
1 /*=============================================================================
2     Copyright (c) 2014-2015 Kohei Takahashi
3
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #ifndef FUSION_LIST_10262014_0537
8 #define FUSION_LIST_10262014_0537
9
10 #include <boost/fusion/support/config.hpp>
11 #include <boost/fusion/container/list/list_fwd.hpp>
12
13 ///////////////////////////////////////////////////////////////////////////////
14 // Without variadics, we will use the PP version
15 ///////////////////////////////////////////////////////////////////////////////
16 #if !defined(BOOST_FUSION_HAS_VARIADIC_LIST)
17 # include <boost/fusion/container/list/detail/cpp03/list.hpp>
18 #else
19
20 ///////////////////////////////////////////////////////////////////////////////
21 // C++11 interface
22 ///////////////////////////////////////////////////////////////////////////////
23 #include <utility>
24 #include <boost/fusion/container/list/detail/list_to_cons.hpp>
25
26 namespace boost { namespace fusion
27 {
28     struct nil_;
29
30     template <>
31     struct list<>
32         : detail::list_to_cons<>::type
33     {
34     private:
35         typedef detail::list_to_cons<> list_to_cons;
36         typedef list_to_cons::type inherited_type;
37
38     public:
39         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
40         list()
41             : inherited_type() {}
42
43 #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
44         template <typename Sequence>
45         BOOST_FUSION_GPU_ENABLED
46         list(Sequence const& rhs)
47             : inherited_type(rhs) {}
48
49         template <typename Sequence>
50         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
51         list&
52         operator=(Sequence const& rhs)
53         {
54             inherited_type::operator=(rhs);
55             return *this;
56         }
57 #else
58         template <typename Sequence>
59         BOOST_FUSION_GPU_ENABLED
60         list(Sequence&& rhs)
61             : inherited_type(std::forward<Sequence>(rhs)) {}
62
63         template <typename Sequence>
64         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
65         list&
66         operator=(Sequence&& rhs)
67         {
68             inherited_type::operator=(std::forward<Sequence>(rhs));
69             return *this;
70         }
71 #endif
72     };
73
74     template <typename ...T>
75     struct list
76         : detail::list_to_cons<T...>::type
77     {
78     private:
79         typedef detail::list_to_cons<T...> list_to_cons;
80         typedef typename list_to_cons::type inherited_type;
81
82     public:
83         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
84         list()
85             : inherited_type() {}
86
87 #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
88         template <typename Sequence>
89         BOOST_FUSION_GPU_ENABLED
90         list(Sequence const& rhs)
91             : inherited_type(rhs) {}
92 #else
93         template <typename Sequence>
94         BOOST_FUSION_GPU_ENABLED
95         list(Sequence&& rhs)
96             : inherited_type(std::forward<Sequence>(rhs)) {}
97 #endif
98
99         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
100         explicit
101         list(typename detail::call_param<T>::type ...args)
102             : inherited_type(list_to_cons::call(args...)) {}
103
104 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
105         template <typename Sequence>
106         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
107         list&
108         operator=(Sequence const& rhs)
109         {
110             inherited_type::operator=(rhs);
111             return *this;
112         }
113 #else
114         template <typename Sequence>
115         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
116         list&
117         operator=(Sequence&& rhs)
118         {
119             inherited_type::operator=(std::forward<Sequence>(rhs));
120             return *this;
121         }
122 #endif
123     };
124 }}
125
126 #endif
127 #endif