Ticket #10295: type_erasure.patch

File type_erasure.patch, 10.7 KB (added by Martina Fedyszynová <m.fedyszynova@…>, 7 years ago)

type_erasure patch for VS2013 (boost 1.58)

Line 
1diff -r boost_1_58_0/boost/type_erasure_orig/callable.hpp boost_1_58_0/boost/type_erasure/callable.hpp
233a34,37
3> #include <boost/preprocessor/if.hpp>
4> #include <boost/preprocessor/identity.hpp>
5> #include <boost/preprocessor/empty.hpp>
6>
771,73c75
8< #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
9< !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
10< !BOOST_WORKAROUND(BOOST_MSVC, == 1800)
11---
12> #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
1392a95,111
14> #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800))
15>
16> /* workaround for buggy type resolution in VS2013
17> * indirection of operator() seems to work
18> */
19> #define CALL_OP_FUNC call_op
20> #define CALL_OP_FORWARDER(is_const) \
21> template <typename... Args> \
22> auto operator()(Args&&... args) BOOST_PP_IF(is_const, BOOST_PP_IDENTITY(const), BOOST_PP_EMPTY) () -> \
23> decltype(call_op(std::forward<Args>(args)...) ) { \
24> return call_op(std::forward<Args>(args)...); \
25> }
26> #else
27> #define CALL_OP_FUNC operator()
28> #define CALL_OP_FORWARDER()
29> #endif
30>
31108c127
32< operator()(typename ::boost::type_erasure::as_param<Base, T>::type... arg)
33---
34> CALL_OP_FUNC(typename ::boost::type_erasure::as_param<Base, T>::type... arg)
35112a132
36> CALL_OP_FORWARDER(/*is_const*/ 0)
37129,130c149,150
38< typename ::boost::type_erasure::rebind_any<Base, R>::type operator()(
39< typename ::boost::type_erasure::as_param<Base, T>::type... arg) const
40---
41> typename ::boost::type_erasure::rebind_any<Base, R>::type
42> CALL_OP_FUNC(typename ::boost::type_erasure::as_param<Base, T>::type... arg) const
43134a155
44> CALL_OP_FORWARDER(/*is_const*/ 1)
45156c177
46< using Base::operator();
47---
48> using Base::CALL_OP_FUNC;
49158c179
50< operator()(typename ::boost::type_erasure::as_param<Base, T>::type... arg)
51---
52> CALL_OP_FUNC(typename ::boost::type_erasure::as_param<Base, T>::type... arg)
53162a184
54> CALL_OP_FORWARDER(/*is_const*/ 0)
55184c206
56< using Base::operator();
57---
58> using Base::CALL_OP_FUNC;
59186c208
60< operator()(typename ::boost::type_erasure::as_param<Base, T>::type... arg) const
61---
62> CALL_OP_FUNC(typename ::boost::type_erasure::as_param<Base, T>::type... arg) const
63190a213
64> CALL_OP_FORWARDER(/*is_const*/ 1)
65192a216,218
66> #undef CALL_OP_FUNC
67> #undef CALL_OP_FORWARDER
68>
69197a224,233
70> #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800))
71>
72> static size_t const _index = sizeof(::boost::declval<This>().
73> _boost_type_erasure_deduce_callable(::boost::declval<T>()... )) - 1;
74>
75> typedef typename ::boost::mpl::at_c<
76> typename This::_boost_type_erasure_callable_results,
77> _index
78> >::type type;
79> #else
80201c237
81< _boost_type_erasure_deduce_callable(::boost::declval<T>()...)) - 1
82---
83> _boost_type_erasure_deduce_callable(::boost::declval<T>()... )) - 1
84202a239
85> #endif
86diff -r boost_1_58_0/boost/type_erasure_orig/constructible.hpp boost_1_58_0/boost/type_erasure/constructible.hpp
8764,66c64
88< #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
89< !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
90< !BOOST_WORKAROUND(BOOST_MSVC, == 1800)
91---
92> #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
93diff -r boost_1_58_0/boost/type_erasure_orig/detail/adapt_to_vtable.hpp boost_1_58_0/boost/type_erasure/detail/adapt_to_vtable.hpp
94178,180c178
95< #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
96< !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
97< !BOOST_WORKAROUND(BOOST_MSVC, == 1800)
98---
99> #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
100diff -r boost_1_58_0/boost/type_erasure_orig/free.hpp boost_1_58_0/boost/type_erasure/free.hpp
10120a21
102> #include <boost/preprocessor/seq/fold_left.hpp>
10340,41c41
104< defined(BOOST_TYPE_ERASURE_DOXYGEN) || \
105< BOOST_WORKAROUND(BOOST_MSVC, == 1800)
106---
107> defined(BOOST_TYPE_ERASURE_DOXYGEN)
108214a215,337
109> #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800))
110>
111> namespace boost { namespace type_erasure
112> {
113> template <typename... T>
114> struct type_vec;
115>
116> namespace detail
117> {
118> template <typename TVec, typename Base, int I, int N, typename... T>
119> struct transformed_type_vec_impl;
120>
121> template <typename TVec, typename Base, int I, int N>
122> struct transformed_type_vec_impl<TVec, Base, I, N>
123> {
124> typedef TVec type;
125> };
126>
127> template <typename Base, int I, int N, typename Ti, typename... T, typename... U>
128> struct transformed_type_vec_impl<type_vec<U...>, Base, I, N, Ti, T...>
129> {
130> typedef typename ::boost::type_erasure::as_param<Base, Ti>::type Ui;
131>
132> typedef
133> typename transformed_type_vec_impl<
134> type_vec<U..., Ui>,
135> Base, I + 1, N, T...
136> >::type
137> type;
138> };
139>
140> template <typename Base, int N, typename Ti, typename... T, typename... U>
141> struct transformed_type_vec_impl<type_vec<U...>, Base, N, N, Ti, T...>
142> {
143> typedef typename ::boost::type_erasure::detail::maybe_const_this_param<Ti, Base>::type Ui;
144>
145> typedef
146> typename transformed_type_vec_impl<
147> type_vec<U..., Ui>,
148> Base, N + 1, N, T...
149> >::type
150> type;
151> };
152>
153> template <typename Base, typename... T>
154> struct transformed_type_vec
155> {
156> typedef
157> typename first_placeholder_index<
158> typename ::boost::remove_cv<
159> typename ::boost::remove_reference<T>::type
160> >::type...
161> >::type
162> free_p_idx;
163>
164> typedef
165> typename transformed_type_vec_impl<
166> type_vec<>, Base, 0, free_p_idx::value, T...
167> >::type
168> type;
169> };
170> } // namespace detail
171> }
172> } // namespace boost::type_erasure
173>
174> #define BOOST_TYPE_ERASURE_INJECT_NAME_CAT(z, st, elem) \
175> BOOST_PP_CAT(st##_, elem)
176>
177> #define BOOST_TYPE_ERASURE_INJECT_NAME(seq) \
178> BOOST_PP_SEQ_FOLD_LEFT(BOOST_TYPE_ERASURE_INJECT_NAME_CAT, inject, seq)
179>
180> #define BOOST_TYPE_ERASURE_FREE_II(qual_name, concept_name, function_name, N) \
181> BOOST_TYPE_ERASURE_OPEN_NAMESPACE(qual_name) \
182> \
183> template <typename Sig> \
184> struct concept_name; \
185> \
186> template <typename R, typename... T> \
187> struct concept_name<R(T...)> { \
188> static R apply(T... t) { \
189> return function_name(std::forward<T>(t)...); \
190> } \
191> }; \
192> \
193> template <typename... T> \
194> struct concept_name<void(T...)> { \
195> static void apply(T... t) { \
196> function_name(std::forward<T>(t)...); \
197> } \
198> }; \
199> \
200> BOOST_TYPE_ERASURE_CLOSE_NAMESPACE(qual_name) \
201> \
202> namespace boost { namespace type_erasure { \
203> template <typename Sig, typename Base, typename TVec> \
204> struct BOOST_TYPE_ERASURE_INJECT_NAME(qual_name); \
205> \
206> template <typename R, typename... T, typename Base, typename... U> \
207> struct BOOST_TYPE_ERASURE_INJECT_NAME(qual_name) <R(T...), Base, type_vec<U...> >: Base { \
208> friend extern typename ::boost::type_erasure::rebind_any<Base, R>::type \
209> function_name(U... u) { \
210> return ::boost::type_erasure::call( \
211> BOOST_TYPE_ERASURE_QUALIFIED_NAME(qual_name)<R(T...)>(), \
212> std::forward<U> (u)... ); \
213> } \
214> }; \
215> \
216> template <typename R, typename... T, typename Base> \
217> struct concept_interface< \
218> BOOST_TYPE_ERASURE_QUALIFIED_NAME(qual_name)<R(T...)>, \
219> Base, \
220> typename ::boost::type_erasure::detail::first_placeholder< \
221> typename ::boost::remove_cv< \
222> typename ::boost::remove_reference<T>::type \
223> >::type... \
224> >::type \
225> > : BOOST_TYPE_ERASURE_INJECT_NAME(qual_name) <R(T...), Base, \
226> typename ::boost::type_erasure::detail::transformed_type_vec<Base, T...>::type \
227> > \
228> {}; \
229> }} /* namespace boost::type_erasure */
230> #else
231>
232274a398
233> #endif
234310c434
235< function_name, \
236---
237> function_name, \
238diff -r boost_1_58_0/boost/type_erasure_orig/member.hpp boost_1_58_0/boost/type_erasure/member.hpp
23938,39c38
240< defined(BOOST_TYPE_ERASURE_DOXYGEN) || \
241< BOOST_WORKAROUND(BOOST_MSVC, == 1800)
242---
243> defined(BOOST_TYPE_ERASURE_DOXYGEN)