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