Imported Upstream version 1.57.0
[platform/upstream/boost.git] / boost / flyweight / detail / pp_perfect_fwd.hpp
1 /* Copyright 2006-2014 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/flyweight for library home page.
7  */
8
9 #ifndef BOOST_FLYWEIGHT_DETAIL_PP_PERFECT_FWD_HPP
10 #define BOOST_FLYWEIGHT_DETAIL_PP_PERFECT_FWD_HPP
11
12 #if defined(_MSC_VER)
13 #pragma once
14 #endif
15
16 #include <boost/config.hpp>
17
18 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
19
20 #define BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
21 name()body((FORWARD)(0))
22
23 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
24 #define BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
25 template<typename T0> name(T0&& t0)body((FORWARD)(1))
26 #endif
27
28 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
29 #define BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
30 template<typename T0,typename T1> name(T0&& t0,T1&& t1)body((FORWARD)(2))
31 #endif
32
33 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
34 #define BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
35 template<typename T0,typename T1,typename T2> name(T0&& t0,T1&& t1,T2&& t2)body((FORWARD)(3))
36 #endif
37
38 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
39 #define BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body) \
40 template<typename T0,typename T1,typename T2,typename T3> name(T0&& t0,T1&& t1,T2&& t2,T3&& t3)body((FORWARD)(4))
41 #endif
42
43 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
44 #define BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body) \
45 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0&& t0,T1&& t1,T2&& t2,T3&& t3,T4&& t4)body((FORWARD)(5))
46 #endif
47
48 #else
49
50 /* no rvalue refs -> [const] Tn& overloads */
51
52 #define BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body) \
53 name()body((ENUM)(0))
54
55 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
56 #define BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body) \
57 template<typename T0> name(T0& t0)body((ENUM)(1))\
58 template<typename T0> name(const T0& t0)body((ENUM)(1))
59 #endif
60
61 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
62 #define BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body) \
63 template<typename T0,typename T1> name(T0& t0,T1& t1)body((ENUM)(2))\
64 template<typename T0,typename T1> name(T0& t0,const T1& t1)body((ENUM)(2))\
65 template<typename T0,typename T1> name(const T0& t0,T1& t1)body((ENUM)(2))\
66 template<typename T0,typename T1> name(const T0& t0,const T1& t1)body((ENUM)(2))
67 #endif
68
69 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
70 #define BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body) \
71 template<typename T0,typename T1,typename T2> name(T0& t0,T1& t1,T2& t2)body((ENUM)(3))\
72 template<typename T0,typename T1,typename T2> name(T0& t0,T1& t1,const T2& t2)body((ENUM)(3))\
73 template<typename T0,typename T1,typename T2> name(T0& t0,const T1& t1,T2& t2)body((ENUM)(3))\
74 template<typename T0,typename T1,typename T2> name(T0& t0,const T1& t1,const T2& t2)body((ENUM)(3))\
75 template<typename T0,typename T1,typename T2> name(const T0& t0,T1& t1,T2& t2)body((ENUM)(3))\
76 template<typename T0,typename T1,typename T2> name(const T0& t0,T1& t1,const T2& t2)body((ENUM)(3))\
77 template<typename T0,typename T1,typename T2> name(const T0& t0,const T1& t1,T2& t2)body((ENUM)(3))\
78 template<typename T0,typename T1,typename T2> name(const T0& t0,const T1& t1,const T2& t2)body((ENUM)(3))
79 #endif
80
81 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
82 #define BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body) \
83 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
84 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
85 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
86 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
87 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
88 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
89 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
90 template<typename T0,typename T1,typename T2,typename T3> name(T0& t0,const T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
91 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
92 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
93 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
94 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))\
95 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,T2& t2,T3& t3)body((ENUM)(4))\
96 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,T2& t2,const T3& t3)body((ENUM)(4))\
97 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,const T2& t2,T3& t3)body((ENUM)(4))\
98 template<typename T0,typename T1,typename T2,typename T3> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3)body((ENUM)(4))
99 #endif
100
101 #if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
102 #define BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body) \
103 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
104 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
105 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
106 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
107 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
108 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
109 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
110 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
111 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
112 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
113 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
114 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
115 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
116 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
117 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
118 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
119 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
120 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
121 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
122 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
123 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
124 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
125 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
126 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
127 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
128 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
129 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
130 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))\
131 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)body((ENUM)(5))\
132 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)body((ENUM)(5))\
133 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)body((ENUM)(5))\
134 template<typename T0,typename T1,typename T2,typename T3,typename T4> name(const T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)body((ENUM)(5))
135 #endif
136
137 #endif
138
139 #if   BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==0
140 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body)
141 #elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==1
142 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body) \
143 BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)
144 #elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==2
145 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body) \
146 BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)                 \
147 BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body)
148 #elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==3
149 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body) \
150 BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)                 \
151 BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body)                 \
152 BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body)
153 #elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==4
154 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body) \
155 BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)                 \
156 BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body)                 \
157 BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body)                 \
158 BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body)
159 #else /* BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==5 */
160 #define BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body) \
161 BOOST_FLYWEIGHT_PERFECT_FWD_1(name,body)                 \
162 BOOST_FLYWEIGHT_PERFECT_FWD_2(name,body)                 \
163 BOOST_FLYWEIGHT_PERFECT_FWD_3(name,body)                 \
164 BOOST_FLYWEIGHT_PERFECT_FWD_4(name,body)                 \
165 BOOST_FLYWEIGHT_PERFECT_FWD_5(name,body)
166 #endif
167
168 #define BOOST_FLYWEIGHT_PERFECT_FWD(name,body)           \
169 BOOST_FLYWEIGHT_PERFECT_FWD_0(name,body)                 \
170 BOOST_FLYWEIGHT_PERFECT_FWD_WITH_ARGS(name,body)
171
172 #endif