Skip to content

Commit aa705b0

Browse files
committed
VC7 workaround
[SVN r13201]
1 parent fbbc198 commit aa705b0

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

include/boost/python/object/make_holder.hpp

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,22 @@
1414

1515
namespace boost { namespace python { namespace objects {
1616

17+
namespace detail
18+
{
19+
// Use of this workaround as opposed to straightforward mpl::at
20+
// needed for vc7, for some reason.
21+
template <unsigned N, class Sequence>
22+
struct at
23+
{
24+
private:
25+
typedef typename mpl::at_algorithm_traits<
26+
typename mpl::sequence_traits<Sequence>::sequence_category
27+
>::template algorithm<N, Sequence>::type base;
28+
public:
29+
typedef typename base::type type;
30+
};
31+
}
32+
1733
template <int nargs> struct make_holder;
1834

1935
template <>
@@ -39,7 +55,7 @@ struct make_holder<1>
3955
struct apply
4056
{
4157
typedef typename mpl::apply1<Generator,T>::type holder;
42-
typedef typename mpl::at<0,ArgList>::type t0;
58+
typedef typename detail::at<0,ArgList>::type t0;
4359
typedef typename forward<t0>::type f0;
4460

4561
static void execute(
@@ -58,9 +74,9 @@ struct make_holder<2>
5874
struct apply
5975
{
6076
typedef typename mpl::apply1<Generator,T>::type holder;
61-
typedef typename mpl::at<0,ArgList>::type t0;
77+
typedef typename detail::at<0,ArgList>::type t0;
6278
typedef typename forward<t0>::type f0;
63-
typedef typename mpl::at<1,ArgList>::type t1;
79+
typedef typename detail::at<1,ArgList>::type t1;
6480
typedef typename forward<t1>::type f1;
6581

6682
static void execute(
@@ -78,11 +94,11 @@ struct make_holder<3>
7894
struct apply
7995
{
8096
typedef typename mpl::apply1<Generator,T>::type holder;
81-
typedef typename mpl::at<0,ArgList>::type t0;
97+
typedef typename detail::at<0,ArgList>::type t0;
8298
typedef typename forward<t0>::type f0;
83-
typedef typename mpl::at<1,ArgList>::type t1;
99+
typedef typename detail::at<1,ArgList>::type t1;
84100
typedef typename forward<t1>::type f1;
85-
typedef typename mpl::at<2,ArgList>::type t2;
101+
typedef typename detail::at<2,ArgList>::type t2;
86102
typedef typename forward<t2>::type f2;
87103

88104
static void execute(
@@ -100,13 +116,13 @@ struct make_holder<4>
100116
struct apply
101117
{
102118
typedef typename mpl::apply1<Generator,T>::type holder;
103-
typedef typename mpl::at<0,ArgList>::type t0;
119+
typedef typename detail::at<0,ArgList>::type t0;
104120
typedef typename forward<t0>::type f0;
105-
typedef typename mpl::at<1,ArgList>::type t1;
121+
typedef typename detail::at<1,ArgList>::type t1;
106122
typedef typename forward<t1>::type f1;
107-
typedef typename mpl::at<2,ArgList>::type t2;
123+
typedef typename detail::at<2,ArgList>::type t2;
108124
typedef typename forward<t2>::type f2;
109-
typedef typename mpl::at<3,ArgList>::type t3;
125+
typedef typename detail::at<3,ArgList>::type t3;
110126
typedef typename forward<t3>::type f3;
111127

112128
static void execute(
@@ -124,15 +140,15 @@ struct make_holder<5>
124140
struct apply
125141
{
126142
typedef typename mpl::apply1<Generator,T>::type holder;
127-
typedef typename mpl::at<0,ArgList>::type t0;
143+
typedef typename detail::at<0,ArgList>::type t0;
128144
typedef typename forward<t0>::type f0;
129-
typedef typename mpl::at<1,ArgList>::type t1;
145+
typedef typename detail::at<1,ArgList>::type t1;
130146
typedef typename forward<t1>::type f1;
131-
typedef typename mpl::at<2,ArgList>::type t2;
147+
typedef typename detail::at<2,ArgList>::type t2;
132148
typedef typename forward<t2>::type f2;
133-
typedef typename mpl::at<3,ArgList>::type t3;
149+
typedef typename detail::at<3,ArgList>::type t3;
134150
typedef typename forward<t3>::type f3;
135-
typedef typename mpl::at<4,ArgList>::type t4;
151+
typedef typename detail::at<4,ArgList>::type t4;
136152
typedef typename forward<t4>::type f4;
137153

138154
static void execute(
@@ -150,17 +166,17 @@ struct make_holder<6>
150166
struct apply
151167
{
152168
typedef typename mpl::apply1<Generator,T>::type holder;
153-
typedef typename mpl::at<0,ArgList>::type t0;
169+
typedef typename detail::at<0,ArgList>::type t0;
154170
typedef typename forward<t0>::type f0;
155-
typedef typename mpl::at<1,ArgList>::type t1;
171+
typedef typename detail::at<1,ArgList>::type t1;
156172
typedef typename forward<t1>::type f1;
157-
typedef typename mpl::at<2,ArgList>::type t2;
173+
typedef typename detail::at<2,ArgList>::type t2;
158174
typedef typename forward<t2>::type f2;
159-
typedef typename mpl::at<3,ArgList>::type t3;
175+
typedef typename detail::at<3,ArgList>::type t3;
160176
typedef typename forward<t3>::type f3;
161-
typedef typename mpl::at<4,ArgList>::type t4;
177+
typedef typename detail::at<4,ArgList>::type t4;
162178
typedef typename forward<t4>::type f4;
163-
typedef typename mpl::at<5,ArgList>::type t5;
179+
typedef typename detail::at<5,ArgList>::type t5;
164180
typedef typename forward<t5>::type f5;
165181

166182
static void execute(

0 commit comments

Comments
 (0)