32
32
// author: Pierre.Saramito@imag.fr
34
// date: 20 march 2011
36
36
#include "rheolef/promote.h"
37
#include "rheolef/field_expr.h"
37
38
namespace rheolef {
38
39
template<class T, class M>
39
typename boost::proto::detail::enable_unary<
41
is_field<field_basic<T,M> >,
43
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
44
::impl<const field_basic<T,M>&>::result_type
46
operator+ (const field_basic<T,M>& arg)
48
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
49
::impl<const field_basic<T,M>&>()(arg);
51
template<class T, class M>
52
typename boost::proto::detail::enable_unary<
54
is_field<field_indirect<T,M> >,
56
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
57
::impl<const field_indirect<T,M>&>::result_type
59
operator+ (const field_indirect<T,M>& arg)
61
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
62
::impl<const field_indirect<T,M>&>()(arg);
64
template<class T, class M>
65
typename boost::proto::detail::enable_unary<
67
is_field<field_indirect_const<T,M> >,
68
field_indirect_const<T,M>,
69
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
70
::impl<const field_indirect_const<T,M>&>::result_type
72
operator+ (const field_indirect_const<T,M>& arg)
74
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
75
::impl<const field_indirect_const<T,M>&>()(arg);
78
typename boost::proto::detail::enable_unary<
80
is_field<field_expr<Expr> >,
82
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
83
::impl<const field_expr<Expr>&>::result_type
85
operator+ (const field_expr<Expr>& arg)
87
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
88
::impl<const field_expr<Expr>&>()(arg);
90
template<class T, class M>
91
typename boost::proto::detail::enable_unary<
93
is_field<field_basic<T,M> >,
95
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
96
::impl<const field_basic<T,M>&>::result_type
98
operator- (const field_basic<T,M>& arg)
100
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
101
::impl<const field_basic<T,M>&>()(arg);
103
template<class T, class M>
104
typename boost::proto::detail::enable_unary<
106
is_field<field_indirect<T,M> >,
108
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
109
::impl<const field_indirect<T,M>&>::result_type
111
operator- (const field_indirect<T,M>& arg)
113
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
114
::impl<const field_indirect<T,M>&>()(arg);
116
template<class T, class M>
117
typename boost::proto::detail::enable_unary<
119
is_field<field_indirect_const<T,M> >,
120
field_indirect_const<T,M>,
121
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
122
::impl<const field_indirect_const<T,M>&>::result_type
124
operator- (const field_indirect_const<T,M>& arg)
126
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
127
::impl<const field_indirect_const<T,M>&>()(arg);
130
typename boost::proto::detail::enable_unary<
132
is_field<field_expr<Expr> >,
134
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
135
::impl<const field_expr<Expr>&>::result_type
137
operator- (const field_expr<Expr>& arg)
139
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
140
::impl<const field_expr<Expr>&>()(arg);
142
template<class T, class M>
40
#if BOOST_VERSION < 104601
41
typename boost::proto::detail::enable_unary<
43
is_field<field_basic<T,M> >,
45
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
46
::impl<const field_basic<T,M>&>::result_type
48
operator+ (const field_basic<T,M>& arg)
50
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
51
::impl<const field_basic<T,M>&>()(arg);
53
#else // BOOST_VERSION >= 104601
54
typename boost::proto::detail::enable_unary<
56
field_domain::proto_grammar,
58
is_field<field_basic<T,M> >,
59
boost::mpl::not_<boost::proto::is_extension<field_basic<T,M> > >
61
boost::proto::tag::unary_plus,
62
field_basic<T,M> const &
64
operator+ (const field_basic<T,M>& arg)
66
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_basic<T,M> const &>()(arg);
68
#endif // BOOST_VERSION
69
template<class T, class M>
70
#if BOOST_VERSION < 104601
71
typename boost::proto::detail::enable_unary<
73
is_field<field_indirect<T,M> >,
75
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
76
::impl<const field_indirect<T,M>&>::result_type
78
operator+ (const field_indirect<T,M>& arg)
80
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
81
::impl<const field_indirect<T,M>&>()(arg);
83
#else // BOOST_VERSION >= 104601
84
typename boost::proto::detail::enable_unary<
86
field_domain::proto_grammar,
88
is_field<field_indirect<T,M> >,
89
boost::mpl::not_<boost::proto::is_extension<field_indirect<T,M> > >
91
boost::proto::tag::unary_plus,
92
field_indirect<T,M> const &
94
operator+ (const field_indirect<T,M>& arg)
96
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_indirect<T,M> const &>()(arg);
98
#endif // BOOST_VERSION
99
template<class T, class M>
100
#if BOOST_VERSION < 104601
101
typename boost::proto::detail::enable_unary<
103
is_field<field_indirect_const<T,M> >,
104
field_indirect_const<T,M>,
105
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
106
::impl<const field_indirect_const<T,M>&>::result_type
108
operator+ (const field_indirect_const<T,M>& arg)
110
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
111
::impl<const field_indirect_const<T,M>&>()(arg);
113
#else // BOOST_VERSION >= 104601
114
typename boost::proto::detail::enable_unary<
116
field_domain::proto_grammar,
118
is_field<field_indirect_const<T,M> >,
119
boost::mpl::not_<boost::proto::is_extension<field_indirect_const<T,M> > >
121
boost::proto::tag::unary_plus,
122
field_indirect_const<T,M> const &
124
operator+ (const field_indirect_const<T,M>& arg)
126
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_indirect_const<T,M> const &>()(arg);
128
#endif // BOOST_VERSION
129
template<class T, class M>
130
#if BOOST_VERSION < 104601
131
typename boost::proto::detail::enable_unary<
133
is_field<field_component<T,M> >,
134
field_component<T,M>,
135
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
136
::impl<const field_component<T,M>&>::result_type
138
operator+ (const field_component<T,M>& arg)
140
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
141
::impl<const field_component<T,M>&>()(arg);
143
#else // BOOST_VERSION >= 104601
144
typename boost::proto::detail::enable_unary<
146
field_domain::proto_grammar,
148
is_field<field_component<T,M> >,
149
boost::mpl::not_<boost::proto::is_extension<field_component<T,M> > >
151
boost::proto::tag::unary_plus,
152
field_component<T,M> const &
154
operator+ (const field_component<T,M>& arg)
156
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_component<T,M> const &>()(arg);
158
#endif // BOOST_VERSION
159
template<class T, class M>
160
#if BOOST_VERSION < 104601
161
typename boost::proto::detail::enable_unary<
163
is_field<field_component_const<T,M> >,
164
field_component_const<T,M>,
165
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
166
::impl<const field_component_const<T,M>&>::result_type
168
operator+ (const field_component_const<T,M>& arg)
170
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
171
::impl<const field_component_const<T,M>&>()(arg);
173
#else // BOOST_VERSION >= 104601
174
typename boost::proto::detail::enable_unary<
176
field_domain::proto_grammar,
178
is_field<field_component_const<T,M> >,
179
boost::mpl::not_<boost::proto::is_extension<field_component_const<T,M> > >
181
boost::proto::tag::unary_plus,
182
field_component_const<T,M> const &
184
operator+ (const field_component_const<T,M>& arg)
186
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_component_const<T,M> const &>()(arg);
188
#endif // BOOST_VERSION
190
#if BOOST_VERSION < 104601
191
typename boost::proto::detail::enable_unary<
193
is_field<field_expr<Expr> >,
195
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
196
::impl<const field_expr<Expr>&>::result_type
198
operator+ (const field_expr<Expr>& arg)
200
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
201
::impl<const field_expr<Expr>&>()(arg);
203
#else // BOOST_VERSION >= 104601
204
typename boost::proto::detail::enable_unary<
206
field_domain::proto_grammar,
208
is_field<field_expr<Expr> >,
209
boost::mpl::not_<boost::proto::is_extension<field_expr<Expr> > >
211
boost::proto::tag::unary_plus,
212
field_expr<Expr> const &
214
operator+ (const field_expr<Expr>& arg)
216
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_expr<Expr> const &>()(arg);
218
#endif // BOOST_VERSION
219
template<class T, class M>
220
#if BOOST_VERSION < 104601
221
typename boost::proto::detail::enable_unary<
223
is_field<field_basic<T,M> >,
225
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
226
::impl<const field_basic<T,M>&>::result_type
228
operator- (const field_basic<T,M>& arg)
230
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
231
::impl<const field_basic<T,M>&>()(arg);
233
#else // BOOST_VERSION >= 104601
234
typename boost::proto::detail::enable_unary<
236
field_domain::proto_grammar,
238
is_field<field_basic<T,M> >,
239
boost::mpl::not_<boost::proto::is_extension<field_basic<T,M> > >
241
boost::proto::tag::negate,
242
field_basic<T,M> const &
244
operator- (const field_basic<T,M>& arg)
246
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_basic<T,M> const &>()(arg);
248
#endif // BOOST_VERSION
249
template<class T, class M>
250
#if BOOST_VERSION < 104601
251
typename boost::proto::detail::enable_unary<
253
is_field<field_indirect<T,M> >,
255
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
256
::impl<const field_indirect<T,M>&>::result_type
258
operator- (const field_indirect<T,M>& arg)
260
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
261
::impl<const field_indirect<T,M>&>()(arg);
263
#else // BOOST_VERSION >= 104601
264
typename boost::proto::detail::enable_unary<
266
field_domain::proto_grammar,
268
is_field<field_indirect<T,M> >,
269
boost::mpl::not_<boost::proto::is_extension<field_indirect<T,M> > >
271
boost::proto::tag::negate,
272
field_indirect<T,M> const &
274
operator- (const field_indirect<T,M>& arg)
276
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_indirect<T,M> const &>()(arg);
278
#endif // BOOST_VERSION
279
template<class T, class M>
280
#if BOOST_VERSION < 104601
281
typename boost::proto::detail::enable_unary<
283
is_field<field_indirect_const<T,M> >,
284
field_indirect_const<T,M>,
285
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
286
::impl<const field_indirect_const<T,M>&>::result_type
288
operator- (const field_indirect_const<T,M>& arg)
290
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
291
::impl<const field_indirect_const<T,M>&>()(arg);
293
#else // BOOST_VERSION >= 104601
294
typename boost::proto::detail::enable_unary<
296
field_domain::proto_grammar,
298
is_field<field_indirect_const<T,M> >,
299
boost::mpl::not_<boost::proto::is_extension<field_indirect_const<T,M> > >
301
boost::proto::tag::negate,
302
field_indirect_const<T,M> const &
304
operator- (const field_indirect_const<T,M>& arg)
306
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_indirect_const<T,M> const &>()(arg);
308
#endif // BOOST_VERSION
309
template<class T, class M>
310
#if BOOST_VERSION < 104601
311
typename boost::proto::detail::enable_unary<
313
is_field<field_component<T,M> >,
314
field_component<T,M>,
315
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
316
::impl<const field_component<T,M>&>::result_type
318
operator- (const field_component<T,M>& arg)
320
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
321
::impl<const field_component<T,M>&>()(arg);
323
#else // BOOST_VERSION >= 104601
324
typename boost::proto::detail::enable_unary<
326
field_domain::proto_grammar,
328
is_field<field_component<T,M> >,
329
boost::mpl::not_<boost::proto::is_extension<field_component<T,M> > >
331
boost::proto::tag::negate,
332
field_component<T,M> const &
334
operator- (const field_component<T,M>& arg)
336
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_component<T,M> const &>()(arg);
338
#endif // BOOST_VERSION
339
template<class T, class M>
340
#if BOOST_VERSION < 104601
341
typename boost::proto::detail::enable_unary<
343
is_field<field_component_const<T,M> >,
344
field_component_const<T,M>,
345
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
346
::impl<const field_component_const<T,M>&>::result_type
348
operator- (const field_component_const<T,M>& arg)
350
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
351
::impl<const field_component_const<T,M>&>()(arg);
353
#else // BOOST_VERSION >= 104601
354
typename boost::proto::detail::enable_unary<
356
field_domain::proto_grammar,
358
is_field<field_component_const<T,M> >,
359
boost::mpl::not_<boost::proto::is_extension<field_component_const<T,M> > >
361
boost::proto::tag::negate,
362
field_component_const<T,M> const &
364
operator- (const field_component_const<T,M>& arg)
366
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_component_const<T,M> const &>()(arg);
368
#endif // BOOST_VERSION
370
#if BOOST_VERSION < 104601
371
typename boost::proto::detail::enable_unary<
373
is_field<field_expr<Expr> >,
375
typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
376
::impl<const field_expr<Expr>&>::result_type
378
operator- (const field_expr<Expr>& arg)
380
return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
381
::impl<const field_expr<Expr>&>()(arg);
383
#else // BOOST_VERSION >= 104601
384
typename boost::proto::detail::enable_unary<
386
field_domain::proto_grammar,
388
is_field<field_expr<Expr> >,
389
boost::mpl::not_<boost::proto::is_extension<field_expr<Expr> > >
391
boost::proto::tag::negate,
392
field_expr<Expr> const &
394
operator- (const field_expr<Expr>& arg)
396
return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_expr<Expr> const &>()(arg);
398
#endif // BOOST_VERSION
399
template<class T, class M>
400
#if BOOST_VERSION < 104601
144
402
boost::proto::detail::enable_binary<
233
606
operator+ (const T& l, const field_indirect_const<T,M>& r)
235
608
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
236
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
238
template<class T, class M>
609
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
611
#else // BOOST_VERSION >= 104601
612
typename boost::proto::detail::enable_binary<
614
field_domain::proto_grammar,
616
boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
619
boost::proto::is_extension<T >,
620
boost::proto::is_extension<field_indirect_const<T,M> >
624
boost::proto::tag::plus,
626
field_indirect_const<T,M> const &
628
operator+ (T const &left, field_indirect_const<T,M> const &right)
630
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_indirect_const<T,M> const &>()(left, right);
632
#endif // BOOST_VERSION
633
template<class T, class M>
634
#if BOOST_VERSION < 104601
636
boost::proto::detail::enable_binary<
640
is_field<field_component<T,M> >,
641
field_component<T,M>,
642
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
643
::impl<const int&, const field_component<T,M>&>::result_type const
645
operator+ (const int& l, const field_component<T,M>& r)
647
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
648
::impl<const int&, const field_component<T,M>&>() (l, r);
650
#else // BOOST_VERSION >= 104601
651
typename boost::proto::detail::enable_binary<
653
field_domain::proto_grammar,
655
boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
658
boost::proto::is_extension<int >,
659
boost::proto::is_extension<field_component<T,M> >
663
boost::proto::tag::plus,
665
field_component<T,M> const &
667
operator+ (int const &left, field_component<T,M> const &right)
669
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_component<T,M> const &>()(left, right);
671
#endif // BOOST_VERSION
672
template<class T, class M>
673
#if BOOST_VERSION < 104601
675
boost::proto::detail::enable_binary<
679
is_field<field_component<T,M> >,
680
field_component<T,M>,
681
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
682
::impl<const T&, const field_component<T,M>&>::result_type const
684
operator+ (const T& l, const field_component<T,M>& r)
686
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
687
::impl<const T&, const field_component<T,M>&>() (l, r);
689
#else // BOOST_VERSION >= 104601
690
typename boost::proto::detail::enable_binary<
692
field_domain::proto_grammar,
694
boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
697
boost::proto::is_extension<T >,
698
boost::proto::is_extension<field_component<T,M> >
702
boost::proto::tag::plus,
704
field_component<T,M> const &
706
operator+ (T const &left, field_component<T,M> const &right)
708
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_component<T,M> const &>()(left, right);
710
#endif // BOOST_VERSION
711
template<class T, class M>
712
#if BOOST_VERSION < 104601
714
boost::proto::detail::enable_binary<
718
is_field<field_component_const<T,M> >,
719
field_component_const<T,M>,
720
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
721
::impl<const int&, const field_component_const<T,M>&>::result_type const
723
operator+ (const int& l, const field_component_const<T,M>& r)
725
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
726
::impl<const int&, const field_component_const<T,M>&>() (l, r);
728
#else // BOOST_VERSION >= 104601
729
typename boost::proto::detail::enable_binary<
731
field_domain::proto_grammar,
733
boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
736
boost::proto::is_extension<int >,
737
boost::proto::is_extension<field_component_const<T,M> >
741
boost::proto::tag::plus,
743
field_component_const<T,M> const &
745
operator+ (int const &left, field_component_const<T,M> const &right)
747
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_component_const<T,M> const &>()(left, right);
749
#endif // BOOST_VERSION
750
template<class T, class M>
751
#if BOOST_VERSION < 104601
753
boost::proto::detail::enable_binary<
757
is_field<field_component_const<T,M> >,
758
field_component_const<T,M>,
759
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
760
::impl<const T&, const field_component_const<T,M>&>::result_type const
762
operator+ (const T& l, const field_component_const<T,M>& r)
764
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
765
::impl<const T&, const field_component_const<T,M>&>() (l, r);
767
#else // BOOST_VERSION >= 104601
768
typename boost::proto::detail::enable_binary<
770
field_domain::proto_grammar,
772
boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
775
boost::proto::is_extension<T >,
776
boost::proto::is_extension<field_component_const<T,M> >
780
boost::proto::tag::plus,
782
field_component_const<T,M> const &
784
operator+ (T const &left, field_component_const<T,M> const &right)
786
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_component_const<T,M> const &>()(left, right);
788
#endif // BOOST_VERSION
789
template<class T, class M>
790
#if BOOST_VERSION < 104601
240
792
boost::proto::detail::enable_binary<
329
996
operator+ (const field_indirect_const<T,M>& l, const T& r)
331
998
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
332
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
999
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
1001
#else // BOOST_VERSION >= 104601
1002
typename boost::proto::detail::enable_binary<
1004
field_domain::proto_grammar,
1006
boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
1009
boost::proto::is_extension<field_indirect_const<T,M> >,
1010
boost::proto::is_extension<T >
1014
boost::proto::tag::plus,
1015
field_indirect_const<T,M> const &,
1018
operator+ (field_indirect_const<T,M> const &left, T const &right)
1020
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T,M> const &, T const &>()(left, right);
1022
#endif // BOOST_VERSION
1023
template<class T, class M>
1024
#if BOOST_VERSION < 104601
1026
boost::proto::detail::enable_binary<
1028
is_field<field_component<T,M> >,
1029
field_component<T,M>,
1032
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1033
::impl<const field_component<T,M>&, const int&>::result_type const
1035
operator+ (const field_component<T,M>& l, const int& r)
1037
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1038
::impl<const field_component<T,M>&, const int&>() (l, r);
1040
#else // BOOST_VERSION >= 104601
1041
typename boost::proto::detail::enable_binary<
1043
field_domain::proto_grammar,
1045
boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
1048
boost::proto::is_extension<field_component<T,M> >,
1049
boost::proto::is_extension<int >
1053
boost::proto::tag::plus,
1054
field_component<T,M> const &,
1057
operator+ (field_component<T,M> const &left, int const &right)
1059
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M> const &, int const &>()(left, right);
1061
#endif // BOOST_VERSION
1062
template<class T, class M>
1063
#if BOOST_VERSION < 104601
1065
boost::proto::detail::enable_binary<
1067
is_field<field_component<T,M> >,
1068
field_component<T,M>,
1071
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1072
::impl<const field_component<T,M>&, const T&>::result_type const
1074
operator+ (const field_component<T,M>& l, const T& r)
1076
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1077
::impl<const field_component<T,M>&, const T&>() (l, r);
1079
#else // BOOST_VERSION >= 104601
1080
typename boost::proto::detail::enable_binary<
1082
field_domain::proto_grammar,
1084
boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
1087
boost::proto::is_extension<field_component<T,M> >,
1088
boost::proto::is_extension<T >
1092
boost::proto::tag::plus,
1093
field_component<T,M> const &,
1096
operator+ (field_component<T,M> const &left, T const &right)
1098
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M> const &, T const &>()(left, right);
1100
#endif // BOOST_VERSION
1101
template<class T, class M>
1102
#if BOOST_VERSION < 104601
1104
boost::proto::detail::enable_binary<
1106
is_field<field_component_const<T,M> >,
1107
field_component_const<T,M>,
1110
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1111
::impl<const field_component_const<T,M>&, const int&>::result_type const
1113
operator+ (const field_component_const<T,M>& l, const int& r)
1115
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1116
::impl<const field_component_const<T,M>&, const int&>() (l, r);
1118
#else // BOOST_VERSION >= 104601
1119
typename boost::proto::detail::enable_binary<
1121
field_domain::proto_grammar,
1123
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
1126
boost::proto::is_extension<field_component_const<T,M> >,
1127
boost::proto::is_extension<int >
1131
boost::proto::tag::plus,
1132
field_component_const<T,M> const &,
1135
operator+ (field_component_const<T,M> const &left, int const &right)
1137
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M> const &, int const &>()(left, right);
1139
#endif // BOOST_VERSION
1140
template<class T, class M>
1141
#if BOOST_VERSION < 104601
1143
boost::proto::detail::enable_binary<
1145
is_field<field_component_const<T,M> >,
1146
field_component_const<T,M>,
1149
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1150
::impl<const field_component_const<T,M>&, const T&>::result_type const
1152
operator+ (const field_component_const<T,M>& l, const T& r)
1154
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1155
::impl<const field_component_const<T,M>&, const T&>() (l, r);
1157
#else // BOOST_VERSION >= 104601
1158
typename boost::proto::detail::enable_binary<
1160
field_domain::proto_grammar,
1162
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
1165
boost::proto::is_extension<field_component_const<T,M> >,
1166
boost::proto::is_extension<T >
1170
boost::proto::tag::plus,
1171
field_component_const<T,M> const &,
1174
operator+ (field_component_const<T,M> const &left, T const &right)
1176
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M> const &, T const &>()(left, right);
1178
#endif // BOOST_VERSION
334
1179
template<class T1, class T2, class M>
1180
#if BOOST_VERSION < 104601
336
1182
boost::proto::detail::enable_binary<
377
1269
operator+ (const field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
379
1271
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
380
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
382
template<class T1, class T2, class M>
1272
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1274
#else // BOOST_VERSION >= 104601
1275
typename boost::proto::detail::enable_binary<
1277
field_domain::proto_grammar,
1279
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1282
boost::proto::is_extension<field_basic<T1,M> >,
1283
boost::proto::is_extension<field_indirect_const<T2,M> >
1287
boost::proto::tag::plus,
1288
field_basic<T1,M> const &,
1289
field_indirect_const<T2,M> const &
1291
operator+ (field_basic<T1,M> const &left, field_indirect_const<T2,M> const &right)
1293
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
1295
#endif // BOOST_VERSION
1296
template<class T1, class T2, class M>
1297
#if BOOST_VERSION < 104601
1299
boost::proto::detail::enable_binary<
1301
is_field<field_basic<T1,M> >,
1303
is_field<field_component<T2,M> >,
1304
field_component<T2,M>,
1305
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1306
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>::result_type const
1308
operator+ (const field_basic<T1,M>& l, const field_component<T2,M>& r)
1310
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1311
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>() (l, r);
1313
#else // BOOST_VERSION >= 104601
1314
typename boost::proto::detail::enable_binary<
1316
field_domain::proto_grammar,
1318
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
1321
boost::proto::is_extension<field_basic<T1,M> >,
1322
boost::proto::is_extension<field_component<T2,M> >
1326
boost::proto::tag::plus,
1327
field_basic<T1,M> const &,
1328
field_component<T2,M> const &
1330
operator+ (field_basic<T1,M> const &left, field_component<T2,M> const &right)
1332
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M> const &, field_component<T2,M> const &>()(left, right);
1334
#endif // BOOST_VERSION
1335
template<class T1, class T2, class M>
1336
#if BOOST_VERSION < 104601
1338
boost::proto::detail::enable_binary<
1340
is_field<field_basic<T1,M> >,
1342
is_field<field_component_const<T2,M> >,
1343
field_component_const<T2,M>,
1344
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1345
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>::result_type const
1347
operator+ (const field_basic<T1,M>& l, const field_component_const<T2,M>& r)
1349
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1350
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>() (l, r);
1352
#else // BOOST_VERSION >= 104601
1353
typename boost::proto::detail::enable_binary<
1355
field_domain::proto_grammar,
1357
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
1360
boost::proto::is_extension<field_basic<T1,M> >,
1361
boost::proto::is_extension<field_component_const<T2,M> >
1365
boost::proto::tag::plus,
1366
field_basic<T1,M> const &,
1367
field_component_const<T2,M> const &
1369
operator+ (field_basic<T1,M> const &left, field_component_const<T2,M> const &right)
1371
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
1373
#endif // BOOST_VERSION
1374
template<class T1, class T2, class M>
1375
#if BOOST_VERSION < 104601
384
1377
boost::proto::detail::enable_binary<
425
1464
operator+ (const field_indirect<T1,M>& l, const field_indirect_const<T2,M>& r)
427
1466
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
428
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
430
template<class T1, class T2, class M>
1467
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1469
#else // BOOST_VERSION >= 104601
1470
typename boost::proto::detail::enable_binary<
1472
field_domain::proto_grammar,
1474
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1477
boost::proto::is_extension<field_indirect<T1,M> >,
1478
boost::proto::is_extension<field_indirect_const<T2,M> >
1482
boost::proto::tag::plus,
1483
field_indirect<T1,M> const &,
1484
field_indirect_const<T2,M> const &
1486
operator+ (field_indirect<T1,M> const &left, field_indirect_const<T2,M> const &right)
1488
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
1490
#endif // BOOST_VERSION
1491
template<class T1, class T2, class M>
1492
#if BOOST_VERSION < 104601
1494
boost::proto::detail::enable_binary<
1496
is_field<field_indirect<T1,M> >,
1497
field_indirect<T1,M>,
1498
is_field<field_component<T2,M> >,
1499
field_component<T2,M>,
1500
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1501
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>::result_type const
1503
operator+ (const field_indirect<T1,M>& l, const field_component<T2,M>& r)
1505
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1506
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>() (l, r);
1508
#else // BOOST_VERSION >= 104601
1509
typename boost::proto::detail::enable_binary<
1511
field_domain::proto_grammar,
1513
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
1516
boost::proto::is_extension<field_indirect<T1,M> >,
1517
boost::proto::is_extension<field_component<T2,M> >
1521
boost::proto::tag::plus,
1522
field_indirect<T1,M> const &,
1523
field_component<T2,M> const &
1525
operator+ (field_indirect<T1,M> const &left, field_component<T2,M> const &right)
1527
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M> const &, field_component<T2,M> const &>()(left, right);
1529
#endif // BOOST_VERSION
1530
template<class T1, class T2, class M>
1531
#if BOOST_VERSION < 104601
1533
boost::proto::detail::enable_binary<
1535
is_field<field_indirect<T1,M> >,
1536
field_indirect<T1,M>,
1537
is_field<field_component_const<T2,M> >,
1538
field_component_const<T2,M>,
1539
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1540
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>::result_type const
1542
operator+ (const field_indirect<T1,M>& l, const field_component_const<T2,M>& r)
1544
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1545
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>() (l, r);
1547
#else // BOOST_VERSION >= 104601
1548
typename boost::proto::detail::enable_binary<
1550
field_domain::proto_grammar,
1552
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
1555
boost::proto::is_extension<field_indirect<T1,M> >,
1556
boost::proto::is_extension<field_component_const<T2,M> >
1560
boost::proto::tag::plus,
1561
field_indirect<T1,M> const &,
1562
field_component_const<T2,M> const &
1564
operator+ (field_indirect<T1,M> const &left, field_component_const<T2,M> const &right)
1566
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
1568
#endif // BOOST_VERSION
1569
template<class T1, class T2, class M>
1570
#if BOOST_VERSION < 104601
432
1572
boost::proto::detail::enable_binary<
473
1659
operator+ (const field_indirect_const<T1,M>& l, const field_indirect_const<T2,M>& r)
475
1661
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
476
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1662
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1664
#else // BOOST_VERSION >= 104601
1665
typename boost::proto::detail::enable_binary<
1667
field_domain::proto_grammar,
1669
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1672
boost::proto::is_extension<field_indirect_const<T1,M> >,
1673
boost::proto::is_extension<field_indirect_const<T2,M> >
1677
boost::proto::tag::plus,
1678
field_indirect_const<T1,M> const &,
1679
field_indirect_const<T2,M> const &
1681
operator+ (field_indirect_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
1683
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
1685
#endif // BOOST_VERSION
1686
template<class T1, class T2, class M>
1687
#if BOOST_VERSION < 104601
1689
boost::proto::detail::enable_binary<
1691
is_field<field_indirect_const<T1,M> >,
1692
field_indirect_const<T1,M>,
1693
is_field<field_component<T2,M> >,
1694
field_component<T2,M>,
1695
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1696
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>::result_type const
1698
operator+ (const field_indirect_const<T1,M>& l, const field_component<T2,M>& r)
1700
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1701
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>() (l, r);
1703
#else // BOOST_VERSION >= 104601
1704
typename boost::proto::detail::enable_binary<
1706
field_domain::proto_grammar,
1708
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
1711
boost::proto::is_extension<field_indirect_const<T1,M> >,
1712
boost::proto::is_extension<field_component<T2,M> >
1716
boost::proto::tag::plus,
1717
field_indirect_const<T1,M> const &,
1718
field_component<T2,M> const &
1720
operator+ (field_indirect_const<T1,M> const &left, field_component<T2,M> const &right)
1722
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
1724
#endif // BOOST_VERSION
1725
template<class T1, class T2, class M>
1726
#if BOOST_VERSION < 104601
1728
boost::proto::detail::enable_binary<
1730
is_field<field_indirect_const<T1,M> >,
1731
field_indirect_const<T1,M>,
1732
is_field<field_component_const<T2,M> >,
1733
field_component_const<T2,M>,
1734
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1735
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
1737
operator+ (const field_indirect_const<T1,M>& l, const field_component_const<T2,M>& r)
1739
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1740
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
1742
#else // BOOST_VERSION >= 104601
1743
typename boost::proto::detail::enable_binary<
1745
field_domain::proto_grammar,
1747
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
1750
boost::proto::is_extension<field_indirect_const<T1,M> >,
1751
boost::proto::is_extension<field_component_const<T2,M> >
1755
boost::proto::tag::plus,
1756
field_indirect_const<T1,M> const &,
1757
field_component_const<T2,M> const &
1759
operator+ (field_indirect_const<T1,M> const &left, field_component_const<T2,M> const &right)
1761
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
1763
#endif // BOOST_VERSION
1764
template<class T1, class T2, class M>
1765
#if BOOST_VERSION < 104601
1767
boost::proto::detail::enable_binary<
1769
is_field<field_component<T1,M> >,
1770
field_component<T1,M>,
1771
is_field<field_basic<T2,M> >,
1773
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1774
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>::result_type const
1776
operator+ (const field_component<T1,M>& l, const field_basic<T2,M>& r)
1778
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1779
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>() (l, r);
1781
#else // BOOST_VERSION >= 104601
1782
typename boost::proto::detail::enable_binary<
1784
field_domain::proto_grammar,
1786
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
1789
boost::proto::is_extension<field_component<T1,M> >,
1790
boost::proto::is_extension<field_basic<T2,M> >
1794
boost::proto::tag::plus,
1795
field_component<T1,M> const &,
1796
field_basic<T2,M> const &
1798
operator+ (field_component<T1,M> const &left, field_basic<T2,M> const &right)
1800
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M> const &, field_basic<T2,M> const &>()(left, right);
1802
#endif // BOOST_VERSION
1803
template<class T1, class T2, class M>
1804
#if BOOST_VERSION < 104601
1806
boost::proto::detail::enable_binary<
1808
is_field<field_component<T1,M> >,
1809
field_component<T1,M>,
1810
is_field<field_indirect<T2,M> >,
1811
field_indirect<T2,M>,
1812
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1813
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>::result_type const
1815
operator+ (const field_component<T1,M>& l, const field_indirect<T2,M>& r)
1817
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1818
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>() (l, r);
1820
#else // BOOST_VERSION >= 104601
1821
typename boost::proto::detail::enable_binary<
1823
field_domain::proto_grammar,
1825
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
1828
boost::proto::is_extension<field_component<T1,M> >,
1829
boost::proto::is_extension<field_indirect<T2,M> >
1833
boost::proto::tag::plus,
1834
field_component<T1,M> const &,
1835
field_indirect<T2,M> const &
1837
operator+ (field_component<T1,M> const &left, field_indirect<T2,M> const &right)
1839
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
1841
#endif // BOOST_VERSION
1842
template<class T1, class T2, class M>
1843
#if BOOST_VERSION < 104601
1845
boost::proto::detail::enable_binary<
1847
is_field<field_component<T1,M> >,
1848
field_component<T1,M>,
1849
is_field<field_indirect_const<T2,M> >,
1850
field_indirect_const<T2,M>,
1851
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1852
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
1854
operator+ (const field_component<T1,M>& l, const field_indirect_const<T2,M>& r)
1856
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1857
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1859
#else // BOOST_VERSION >= 104601
1860
typename boost::proto::detail::enable_binary<
1862
field_domain::proto_grammar,
1864
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1867
boost::proto::is_extension<field_component<T1,M> >,
1868
boost::proto::is_extension<field_indirect_const<T2,M> >
1872
boost::proto::tag::plus,
1873
field_component<T1,M> const &,
1874
field_indirect_const<T2,M> const &
1876
operator+ (field_component<T1,M> const &left, field_indirect_const<T2,M> const &right)
1878
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
1880
#endif // BOOST_VERSION
1881
template<class T1, class T2, class M>
1882
#if BOOST_VERSION < 104601
1884
boost::proto::detail::enable_binary<
1886
is_field<field_component<T1,M> >,
1887
field_component<T1,M>,
1888
is_field<field_component<T2,M> >,
1889
field_component<T2,M>,
1890
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1891
::impl<const field_component<T1,M>&, const field_component<T2,M>&>::result_type const
1893
operator+ (const field_component<T1,M>& l, const field_component<T2,M>& r)
1895
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1896
::impl<const field_component<T1,M>&, const field_component<T2,M>&>() (l, r);
1898
#else // BOOST_VERSION >= 104601
1899
typename boost::proto::detail::enable_binary<
1901
field_domain::proto_grammar,
1903
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
1906
boost::proto::is_extension<field_component<T1,M> >,
1907
boost::proto::is_extension<field_component<T2,M> >
1911
boost::proto::tag::plus,
1912
field_component<T1,M> const &,
1913
field_component<T2,M> const &
1915
operator+ (field_component<T1,M> const &left, field_component<T2,M> const &right)
1917
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M> const &, field_component<T2,M> const &>()(left, right);
1919
#endif // BOOST_VERSION
1920
template<class T1, class T2, class M>
1921
#if BOOST_VERSION < 104601
1923
boost::proto::detail::enable_binary<
1925
is_field<field_component<T1,M> >,
1926
field_component<T1,M>,
1927
is_field<field_component_const<T2,M> >,
1928
field_component_const<T2,M>,
1929
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1930
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>::result_type const
1932
operator+ (const field_component<T1,M>& l, const field_component_const<T2,M>& r)
1934
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1935
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>() (l, r);
1937
#else // BOOST_VERSION >= 104601
1938
typename boost::proto::detail::enable_binary<
1940
field_domain::proto_grammar,
1942
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
1945
boost::proto::is_extension<field_component<T1,M> >,
1946
boost::proto::is_extension<field_component_const<T2,M> >
1950
boost::proto::tag::plus,
1951
field_component<T1,M> const &,
1952
field_component_const<T2,M> const &
1954
operator+ (field_component<T1,M> const &left, field_component_const<T2,M> const &right)
1956
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
1958
#endif // BOOST_VERSION
1959
template<class T1, class T2, class M>
1960
#if BOOST_VERSION < 104601
1962
boost::proto::detail::enable_binary<
1964
is_field<field_component_const<T1,M> >,
1965
field_component_const<T1,M>,
1966
is_field<field_basic<T2,M> >,
1968
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1969
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>::result_type const
1971
operator+ (const field_component_const<T1,M>& l, const field_basic<T2,M>& r)
1973
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1974
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>() (l, r);
1976
#else // BOOST_VERSION >= 104601
1977
typename boost::proto::detail::enable_binary<
1979
field_domain::proto_grammar,
1981
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
1984
boost::proto::is_extension<field_component_const<T1,M> >,
1985
boost::proto::is_extension<field_basic<T2,M> >
1989
boost::proto::tag::plus,
1990
field_component_const<T1,M> const &,
1991
field_basic<T2,M> const &
1993
operator+ (field_component_const<T1,M> const &left, field_basic<T2,M> const &right)
1995
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T1,M> const &, field_basic<T2,M> const &>()(left, right);
1997
#endif // BOOST_VERSION
1998
template<class T1, class T2, class M>
1999
#if BOOST_VERSION < 104601
2001
boost::proto::detail::enable_binary<
2003
is_field<field_component_const<T1,M> >,
2004
field_component_const<T1,M>,
2005
is_field<field_indirect<T2,M> >,
2006
field_indirect<T2,M>,
2007
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2008
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>::result_type const
2010
operator+ (const field_component_const<T1,M>& l, const field_indirect<T2,M>& r)
2012
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2013
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>() (l, r);
2015
#else // BOOST_VERSION >= 104601
2016
typename boost::proto::detail::enable_binary<
2018
field_domain::proto_grammar,
2020
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
2023
boost::proto::is_extension<field_component_const<T1,M> >,
2024
boost::proto::is_extension<field_indirect<T2,M> >
2028
boost::proto::tag::plus,
2029
field_component_const<T1,M> const &,
2030
field_indirect<T2,M> const &
2032
operator+ (field_component_const<T1,M> const &left, field_indirect<T2,M> const &right)
2034
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
2036
#endif // BOOST_VERSION
2037
template<class T1, class T2, class M>
2038
#if BOOST_VERSION < 104601
2040
boost::proto::detail::enable_binary<
2042
is_field<field_component_const<T1,M> >,
2043
field_component_const<T1,M>,
2044
is_field<field_indirect_const<T2,M> >,
2045
field_indirect_const<T2,M>,
2046
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2047
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
2049
operator+ (const field_component_const<T1,M>& l, const field_indirect_const<T2,M>& r)
2051
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2052
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
2054
#else // BOOST_VERSION >= 104601
2055
typename boost::proto::detail::enable_binary<
2057
field_domain::proto_grammar,
2059
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
2062
boost::proto::is_extension<field_component_const<T1,M> >,
2063
boost::proto::is_extension<field_indirect_const<T2,M> >
2067
boost::proto::tag::plus,
2068
field_component_const<T1,M> const &,
2069
field_indirect_const<T2,M> const &
2071
operator+ (field_component_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
2073
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
2075
#endif // BOOST_VERSION
2076
template<class T1, class T2, class M>
2077
#if BOOST_VERSION < 104601
2079
boost::proto::detail::enable_binary<
2081
is_field<field_component_const<T1,M> >,
2082
field_component_const<T1,M>,
2083
is_field<field_component<T2,M> >,
2084
field_component<T2,M>,
2085
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2086
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>::result_type const
2088
operator+ (const field_component_const<T1,M>& l, const field_component<T2,M>& r)
2090
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2091
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>() (l, r);
2093
#else // BOOST_VERSION >= 104601
2094
typename boost::proto::detail::enable_binary<
2096
field_domain::proto_grammar,
2098
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
2101
boost::proto::is_extension<field_component_const<T1,M> >,
2102
boost::proto::is_extension<field_component<T2,M> >
2106
boost::proto::tag::plus,
2107
field_component_const<T1,M> const &,
2108
field_component<T2,M> const &
2110
operator+ (field_component_const<T1,M> const &left, field_component<T2,M> const &right)
2112
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
2114
#endif // BOOST_VERSION
2115
template<class T1, class T2, class M>
2116
#if BOOST_VERSION < 104601
2118
boost::proto::detail::enable_binary<
2120
is_field<field_component_const<T1,M> >,
2121
field_component_const<T1,M>,
2122
is_field<field_component_const<T2,M> >,
2123
field_component_const<T2,M>,
2124
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2125
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
2127
operator+ (const field_component_const<T1,M>& l, const field_component_const<T2,M>& r)
2129
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2130
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
2132
#else // BOOST_VERSION >= 104601
2133
typename boost::proto::detail::enable_binary<
2135
field_domain::proto_grammar,
2137
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
2140
boost::proto::is_extension<field_component_const<T1,M> >,
2141
boost::proto::is_extension<field_component_const<T2,M> >
2145
boost::proto::tag::plus,
2146
field_component_const<T1,M> const &,
2147
field_component_const<T2,M> const &
2149
operator+ (field_component_const<T1,M> const &left, field_component_const<T2,M> const &right)
2151
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
2153
#endif // BOOST_VERSION
478
2154
template<class Expr>
2155
#if BOOST_VERSION < 104601
480
2157
boost::proto::detail::enable_binary<
633
2517
operator+ (const field_expr<Expr>& l, const field_indirect_const<T,M>& r)
635
2519
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
636
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
2520
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
2522
#else // BOOST_VERSION >= 104601
2523
typename boost::proto::detail::enable_binary<
2525
field_domain::proto_grammar,
2527
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
2530
boost::proto::is_extension<field_expr<Expr> >,
2531
boost::proto::is_extension<field_indirect_const<T,M> >
2535
boost::proto::tag::plus,
2536
field_expr<Expr> const &,
2537
field_indirect_const<T,M> const &
2539
operator+ (field_expr<Expr> const &left, field_indirect_const<T,M> const &right)
2541
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr> const &, field_indirect_const<T,M> const &>()(left, right);
2543
#endif // BOOST_VERSION
2544
template<class T, class M, class Expr>
2545
#if BOOST_VERSION < 104601
2547
boost::proto::detail::enable_binary<
2549
is_field<field_component<T,M> >,
2550
field_component<T,M>,
2551
is_field<field_expr<Expr> >,
2553
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2554
::impl<const field_component<T,M>&, const field_expr<Expr>&>::result_type const
2556
operator+ (const field_component<T,M>& l, const field_expr<Expr>& r)
2558
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2559
::impl<const field_component<T,M>&, const field_expr<Expr>&>() (l, r);
2561
#else // BOOST_VERSION >= 104601
2562
typename boost::proto::detail::enable_binary<
2564
field_domain::proto_grammar,
2566
boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
2569
boost::proto::is_extension<field_component<T,M> >,
2570
boost::proto::is_extension<field_expr<Expr> >
2574
boost::proto::tag::plus,
2575
field_component<T,M> const &,
2576
field_expr<Expr> const &
2578
operator+ (field_component<T,M> const &left, field_expr<Expr> const &right)
2580
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M> const &, field_expr<Expr> const &>()(left, right);
2582
#endif // BOOST_VERSION
2583
template<class T, class M, class Expr>
2584
#if BOOST_VERSION < 104601
2586
boost::proto::detail::enable_binary<
2588
is_field<field_expr<Expr> >,
2590
is_field<field_component<T,M> >,
2591
field_component<T,M>,
2592
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2593
::impl<const field_expr<Expr>&, const field_component<T,M>&>::result_type const
2595
operator+ (const field_expr<Expr>& l, const field_component<T,M>& r)
2597
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2598
::impl<const field_expr<Expr>&, const field_component<T,M>&>() (l, r);
2600
#else // BOOST_VERSION >= 104601
2601
typename boost::proto::detail::enable_binary<
2603
field_domain::proto_grammar,
2605
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
2608
boost::proto::is_extension<field_expr<Expr> >,
2609
boost::proto::is_extension<field_component<T,M> >
2613
boost::proto::tag::plus,
2614
field_expr<Expr> const &,
2615
field_component<T,M> const &
2617
operator+ (field_expr<Expr> const &left, field_component<T,M> const &right)
2619
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr> const &, field_component<T,M> const &>()(left, right);
2621
#endif // BOOST_VERSION
2622
template<class T, class M, class Expr>
2623
#if BOOST_VERSION < 104601
2625
boost::proto::detail::enable_binary<
2627
is_field<field_component_const<T,M> >,
2628
field_component_const<T,M>,
2629
is_field<field_expr<Expr> >,
2631
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2632
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>::result_type const
2634
operator+ (const field_component_const<T,M>& l, const field_expr<Expr>& r)
2636
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2637
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>() (l, r);
2639
#else // BOOST_VERSION >= 104601
2640
typename boost::proto::detail::enable_binary<
2642
field_domain::proto_grammar,
2644
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
2647
boost::proto::is_extension<field_component_const<T,M> >,
2648
boost::proto::is_extension<field_expr<Expr> >
2652
boost::proto::tag::plus,
2653
field_component_const<T,M> const &,
2654
field_expr<Expr> const &
2656
operator+ (field_component_const<T,M> const &left, field_expr<Expr> const &right)
2658
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M> const &, field_expr<Expr> const &>()(left, right);
2660
#endif // BOOST_VERSION
2661
template<class T, class M, class Expr>
2662
#if BOOST_VERSION < 104601
2664
boost::proto::detail::enable_binary<
2666
is_field<field_expr<Expr> >,
2668
is_field<field_component_const<T,M> >,
2669
field_component_const<T,M>,
2670
typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2671
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>::result_type const
2673
operator+ (const field_expr<Expr>& l, const field_component_const<T,M>& r)
2675
return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2676
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>() (l, r);
2678
#else // BOOST_VERSION >= 104601
2679
typename boost::proto::detail::enable_binary<
2681
field_domain::proto_grammar,
2683
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
2686
boost::proto::is_extension<field_expr<Expr> >,
2687
boost::proto::is_extension<field_component_const<T,M> >
2691
boost::proto::tag::plus,
2692
field_expr<Expr> const &,
2693
field_component_const<T,M> const &
2695
operator+ (field_expr<Expr> const &left, field_component_const<T,M> const &right)
2697
return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr> const &, field_component_const<T,M> const &>()(left, right);
2699
#endif // BOOST_VERSION
638
2700
template<class Expr1, class Expr2>
2701
#if BOOST_VERSION < 104601
640
2703
boost::proto::detail::enable_binary<
745
2946
operator- (const T& l, const field_indirect_const<T,M>& r)
747
2948
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
748
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
750
template<class T, class M>
2949
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
2951
#else // BOOST_VERSION >= 104601
2952
typename boost::proto::detail::enable_binary<
2954
field_domain::proto_grammar,
2956
boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
2959
boost::proto::is_extension<T >,
2960
boost::proto::is_extension<field_indirect_const<T,M> >
2964
boost::proto::tag::minus,
2966
field_indirect_const<T,M> const &
2968
operator- (T const &left, field_indirect_const<T,M> const &right)
2970
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_indirect_const<T,M> const &>()(left, right);
2972
#endif // BOOST_VERSION
2973
template<class T, class M>
2974
#if BOOST_VERSION < 104601
2976
boost::proto::detail::enable_binary<
2980
is_field<field_component<T,M> >,
2981
field_component<T,M>,
2982
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2983
::impl<const int&, const field_component<T,M>&>::result_type const
2985
operator- (const int& l, const field_component<T,M>& r)
2987
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2988
::impl<const int&, const field_component<T,M>&>() (l, r);
2990
#else // BOOST_VERSION >= 104601
2991
typename boost::proto::detail::enable_binary<
2993
field_domain::proto_grammar,
2995
boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
2998
boost::proto::is_extension<int >,
2999
boost::proto::is_extension<field_component<T,M> >
3003
boost::proto::tag::minus,
3005
field_component<T,M> const &
3007
operator- (int const &left, field_component<T,M> const &right)
3009
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_component<T,M> const &>()(left, right);
3011
#endif // BOOST_VERSION
3012
template<class T, class M>
3013
#if BOOST_VERSION < 104601
3015
boost::proto::detail::enable_binary<
3019
is_field<field_component<T,M> >,
3020
field_component<T,M>,
3021
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3022
::impl<const T&, const field_component<T,M>&>::result_type const
3024
operator- (const T& l, const field_component<T,M>& r)
3026
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3027
::impl<const T&, const field_component<T,M>&>() (l, r);
3029
#else // BOOST_VERSION >= 104601
3030
typename boost::proto::detail::enable_binary<
3032
field_domain::proto_grammar,
3034
boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
3037
boost::proto::is_extension<T >,
3038
boost::proto::is_extension<field_component<T,M> >
3042
boost::proto::tag::minus,
3044
field_component<T,M> const &
3046
operator- (T const &left, field_component<T,M> const &right)
3048
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_component<T,M> const &>()(left, right);
3050
#endif // BOOST_VERSION
3051
template<class T, class M>
3052
#if BOOST_VERSION < 104601
3054
boost::proto::detail::enable_binary<
3058
is_field<field_component_const<T,M> >,
3059
field_component_const<T,M>,
3060
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3061
::impl<const int&, const field_component_const<T,M>&>::result_type const
3063
operator- (const int& l, const field_component_const<T,M>& r)
3065
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3066
::impl<const int&, const field_component_const<T,M>&>() (l, r);
3068
#else // BOOST_VERSION >= 104601
3069
typename boost::proto::detail::enable_binary<
3071
field_domain::proto_grammar,
3073
boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
3076
boost::proto::is_extension<int >,
3077
boost::proto::is_extension<field_component_const<T,M> >
3081
boost::proto::tag::minus,
3083
field_component_const<T,M> const &
3085
operator- (int const &left, field_component_const<T,M> const &right)
3087
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_component_const<T,M> const &>()(left, right);
3089
#endif // BOOST_VERSION
3090
template<class T, class M>
3091
#if BOOST_VERSION < 104601
3093
boost::proto::detail::enable_binary<
3097
is_field<field_component_const<T,M> >,
3098
field_component_const<T,M>,
3099
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3100
::impl<const T&, const field_component_const<T,M>&>::result_type const
3102
operator- (const T& l, const field_component_const<T,M>& r)
3104
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3105
::impl<const T&, const field_component_const<T,M>&>() (l, r);
3107
#else // BOOST_VERSION >= 104601
3108
typename boost::proto::detail::enable_binary<
3110
field_domain::proto_grammar,
3112
boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
3115
boost::proto::is_extension<T >,
3116
boost::proto::is_extension<field_component_const<T,M> >
3120
boost::proto::tag::minus,
3122
field_component_const<T,M> const &
3124
operator- (T const &left, field_component_const<T,M> const &right)
3126
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_component_const<T,M> const &>()(left, right);
3128
#endif // BOOST_VERSION
3129
template<class T, class M>
3130
#if BOOST_VERSION < 104601
752
3132
boost::proto::detail::enable_binary<
841
3336
operator- (const field_indirect_const<T,M>& l, const T& r)
843
3338
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
844
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
3339
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
3341
#else // BOOST_VERSION >= 104601
3342
typename boost::proto::detail::enable_binary<
3344
field_domain::proto_grammar,
3346
boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
3349
boost::proto::is_extension<field_indirect_const<T,M> >,
3350
boost::proto::is_extension<T >
3354
boost::proto::tag::minus,
3355
field_indirect_const<T,M> const &,
3358
operator- (field_indirect_const<T,M> const &left, T const &right)
3360
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T,M> const &, T const &>()(left, right);
3362
#endif // BOOST_VERSION
3363
template<class T, class M>
3364
#if BOOST_VERSION < 104601
3366
boost::proto::detail::enable_binary<
3368
is_field<field_component<T,M> >,
3369
field_component<T,M>,
3372
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3373
::impl<const field_component<T,M>&, const int&>::result_type const
3375
operator- (const field_component<T,M>& l, const int& r)
3377
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3378
::impl<const field_component<T,M>&, const int&>() (l, r);
3380
#else // BOOST_VERSION >= 104601
3381
typename boost::proto::detail::enable_binary<
3383
field_domain::proto_grammar,
3385
boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
3388
boost::proto::is_extension<field_component<T,M> >,
3389
boost::proto::is_extension<int >
3393
boost::proto::tag::minus,
3394
field_component<T,M> const &,
3397
operator- (field_component<T,M> const &left, int const &right)
3399
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M> const &, int const &>()(left, right);
3401
#endif // BOOST_VERSION
3402
template<class T, class M>
3403
#if BOOST_VERSION < 104601
3405
boost::proto::detail::enable_binary<
3407
is_field<field_component<T,M> >,
3408
field_component<T,M>,
3411
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3412
::impl<const field_component<T,M>&, const T&>::result_type const
3414
operator- (const field_component<T,M>& l, const T& r)
3416
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3417
::impl<const field_component<T,M>&, const T&>() (l, r);
3419
#else // BOOST_VERSION >= 104601
3420
typename boost::proto::detail::enable_binary<
3422
field_domain::proto_grammar,
3424
boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
3427
boost::proto::is_extension<field_component<T,M> >,
3428
boost::proto::is_extension<T >
3432
boost::proto::tag::minus,
3433
field_component<T,M> const &,
3436
operator- (field_component<T,M> const &left, T const &right)
3438
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M> const &, T const &>()(left, right);
3440
#endif // BOOST_VERSION
3441
template<class T, class M>
3442
#if BOOST_VERSION < 104601
3444
boost::proto::detail::enable_binary<
3446
is_field<field_component_const<T,M> >,
3447
field_component_const<T,M>,
3450
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3451
::impl<const field_component_const<T,M>&, const int&>::result_type const
3453
operator- (const field_component_const<T,M>& l, const int& r)
3455
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3456
::impl<const field_component_const<T,M>&, const int&>() (l, r);
3458
#else // BOOST_VERSION >= 104601
3459
typename boost::proto::detail::enable_binary<
3461
field_domain::proto_grammar,
3463
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
3466
boost::proto::is_extension<field_component_const<T,M> >,
3467
boost::proto::is_extension<int >
3471
boost::proto::tag::minus,
3472
field_component_const<T,M> const &,
3475
operator- (field_component_const<T,M> const &left, int const &right)
3477
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M> const &, int const &>()(left, right);
3479
#endif // BOOST_VERSION
3480
template<class T, class M>
3481
#if BOOST_VERSION < 104601
3483
boost::proto::detail::enable_binary<
3485
is_field<field_component_const<T,M> >,
3486
field_component_const<T,M>,
3489
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3490
::impl<const field_component_const<T,M>&, const T&>::result_type const
3492
operator- (const field_component_const<T,M>& l, const T& r)
3494
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3495
::impl<const field_component_const<T,M>&, const T&>() (l, r);
3497
#else // BOOST_VERSION >= 104601
3498
typename boost::proto::detail::enable_binary<
3500
field_domain::proto_grammar,
3502
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
3505
boost::proto::is_extension<field_component_const<T,M> >,
3506
boost::proto::is_extension<T >
3510
boost::proto::tag::minus,
3511
field_component_const<T,M> const &,
3514
operator- (field_component_const<T,M> const &left, T const &right)
3516
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M> const &, T const &>()(left, right);
3518
#endif // BOOST_VERSION
846
3519
template<class T1, class T2, class M>
3520
#if BOOST_VERSION < 104601
848
3522
boost::proto::detail::enable_binary<
889
3609
operator- (const field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
891
3611
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
892
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
894
template<class T1, class T2, class M>
3612
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
3614
#else // BOOST_VERSION >= 104601
3615
typename boost::proto::detail::enable_binary<
3617
field_domain::proto_grammar,
3619
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
3622
boost::proto::is_extension<field_basic<T1,M> >,
3623
boost::proto::is_extension<field_indirect_const<T2,M> >
3627
boost::proto::tag::minus,
3628
field_basic<T1,M> const &,
3629
field_indirect_const<T2,M> const &
3631
operator- (field_basic<T1,M> const &left, field_indirect_const<T2,M> const &right)
3633
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
3635
#endif // BOOST_VERSION
3636
template<class T1, class T2, class M>
3637
#if BOOST_VERSION < 104601
3639
boost::proto::detail::enable_binary<
3641
is_field<field_basic<T1,M> >,
3643
is_field<field_component<T2,M> >,
3644
field_component<T2,M>,
3645
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3646
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>::result_type const
3648
operator- (const field_basic<T1,M>& l, const field_component<T2,M>& r)
3650
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3651
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>() (l, r);
3653
#else // BOOST_VERSION >= 104601
3654
typename boost::proto::detail::enable_binary<
3656
field_domain::proto_grammar,
3658
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
3661
boost::proto::is_extension<field_basic<T1,M> >,
3662
boost::proto::is_extension<field_component<T2,M> >
3666
boost::proto::tag::minus,
3667
field_basic<T1,M> const &,
3668
field_component<T2,M> const &
3670
operator- (field_basic<T1,M> const &left, field_component<T2,M> const &right)
3672
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M> const &, field_component<T2,M> const &>()(left, right);
3674
#endif // BOOST_VERSION
3675
template<class T1, class T2, class M>
3676
#if BOOST_VERSION < 104601
3678
boost::proto::detail::enable_binary<
3680
is_field<field_basic<T1,M> >,
3682
is_field<field_component_const<T2,M> >,
3683
field_component_const<T2,M>,
3684
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3685
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>::result_type const
3687
operator- (const field_basic<T1,M>& l, const field_component_const<T2,M>& r)
3689
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3690
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>() (l, r);
3692
#else // BOOST_VERSION >= 104601
3693
typename boost::proto::detail::enable_binary<
3695
field_domain::proto_grammar,
3697
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
3700
boost::proto::is_extension<field_basic<T1,M> >,
3701
boost::proto::is_extension<field_component_const<T2,M> >
3705
boost::proto::tag::minus,
3706
field_basic<T1,M> const &,
3707
field_component_const<T2,M> const &
3709
operator- (field_basic<T1,M> const &left, field_component_const<T2,M> const &right)
3711
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
3713
#endif // BOOST_VERSION
3714
template<class T1, class T2, class M>
3715
#if BOOST_VERSION < 104601
896
3717
boost::proto::detail::enable_binary<
937
3804
operator- (const field_indirect<T1,M>& l, const field_indirect_const<T2,M>& r)
939
3806
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
940
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
942
template<class T1, class T2, class M>
3807
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
3809
#else // BOOST_VERSION >= 104601
3810
typename boost::proto::detail::enable_binary<
3812
field_domain::proto_grammar,
3814
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
3817
boost::proto::is_extension<field_indirect<T1,M> >,
3818
boost::proto::is_extension<field_indirect_const<T2,M> >
3822
boost::proto::tag::minus,
3823
field_indirect<T1,M> const &,
3824
field_indirect_const<T2,M> const &
3826
operator- (field_indirect<T1,M> const &left, field_indirect_const<T2,M> const &right)
3828
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
3830
#endif // BOOST_VERSION
3831
template<class T1, class T2, class M>
3832
#if BOOST_VERSION < 104601
3834
boost::proto::detail::enable_binary<
3836
is_field<field_indirect<T1,M> >,
3837
field_indirect<T1,M>,
3838
is_field<field_component<T2,M> >,
3839
field_component<T2,M>,
3840
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3841
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>::result_type const
3843
operator- (const field_indirect<T1,M>& l, const field_component<T2,M>& r)
3845
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3846
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>() (l, r);
3848
#else // BOOST_VERSION >= 104601
3849
typename boost::proto::detail::enable_binary<
3851
field_domain::proto_grammar,
3853
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
3856
boost::proto::is_extension<field_indirect<T1,M> >,
3857
boost::proto::is_extension<field_component<T2,M> >
3861
boost::proto::tag::minus,
3862
field_indirect<T1,M> const &,
3863
field_component<T2,M> const &
3865
operator- (field_indirect<T1,M> const &left, field_component<T2,M> const &right)
3867
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M> const &, field_component<T2,M> const &>()(left, right);
3869
#endif // BOOST_VERSION
3870
template<class T1, class T2, class M>
3871
#if BOOST_VERSION < 104601
3873
boost::proto::detail::enable_binary<
3875
is_field<field_indirect<T1,M> >,
3876
field_indirect<T1,M>,
3877
is_field<field_component_const<T2,M> >,
3878
field_component_const<T2,M>,
3879
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3880
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>::result_type const
3882
operator- (const field_indirect<T1,M>& l, const field_component_const<T2,M>& r)
3884
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3885
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>() (l, r);
3887
#else // BOOST_VERSION >= 104601
3888
typename boost::proto::detail::enable_binary<
3890
field_domain::proto_grammar,
3892
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
3895
boost::proto::is_extension<field_indirect<T1,M> >,
3896
boost::proto::is_extension<field_component_const<T2,M> >
3900
boost::proto::tag::minus,
3901
field_indirect<T1,M> const &,
3902
field_component_const<T2,M> const &
3904
operator- (field_indirect<T1,M> const &left, field_component_const<T2,M> const &right)
3906
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
3908
#endif // BOOST_VERSION
3909
template<class T1, class T2, class M>
3910
#if BOOST_VERSION < 104601
944
3912
boost::proto::detail::enable_binary<
985
3999
operator- (const field_indirect_const<T1,M>& l, const field_indirect_const<T2,M>& r)
987
4001
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
988
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
4002
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
4004
#else // BOOST_VERSION >= 104601
4005
typename boost::proto::detail::enable_binary<
4007
field_domain::proto_grammar,
4009
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4012
boost::proto::is_extension<field_indirect_const<T1,M> >,
4013
boost::proto::is_extension<field_indirect_const<T2,M> >
4017
boost::proto::tag::minus,
4018
field_indirect_const<T1,M> const &,
4019
field_indirect_const<T2,M> const &
4021
operator- (field_indirect_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
4023
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
4025
#endif // BOOST_VERSION
4026
template<class T1, class T2, class M>
4027
#if BOOST_VERSION < 104601
4029
boost::proto::detail::enable_binary<
4031
is_field<field_indirect_const<T1,M> >,
4032
field_indirect_const<T1,M>,
4033
is_field<field_component<T2,M> >,
4034
field_component<T2,M>,
4035
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4036
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>::result_type const
4038
operator- (const field_indirect_const<T1,M>& l, const field_component<T2,M>& r)
4040
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4041
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>() (l, r);
4043
#else // BOOST_VERSION >= 104601
4044
typename boost::proto::detail::enable_binary<
4046
field_domain::proto_grammar,
4048
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
4051
boost::proto::is_extension<field_indirect_const<T1,M> >,
4052
boost::proto::is_extension<field_component<T2,M> >
4056
boost::proto::tag::minus,
4057
field_indirect_const<T1,M> const &,
4058
field_component<T2,M> const &
4060
operator- (field_indirect_const<T1,M> const &left, field_component<T2,M> const &right)
4062
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
4064
#endif // BOOST_VERSION
4065
template<class T1, class T2, class M>
4066
#if BOOST_VERSION < 104601
4068
boost::proto::detail::enable_binary<
4070
is_field<field_indirect_const<T1,M> >,
4071
field_indirect_const<T1,M>,
4072
is_field<field_component_const<T2,M> >,
4073
field_component_const<T2,M>,
4074
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4075
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
4077
operator- (const field_indirect_const<T1,M>& l, const field_component_const<T2,M>& r)
4079
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4080
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
4082
#else // BOOST_VERSION >= 104601
4083
typename boost::proto::detail::enable_binary<
4085
field_domain::proto_grammar,
4087
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
4090
boost::proto::is_extension<field_indirect_const<T1,M> >,
4091
boost::proto::is_extension<field_component_const<T2,M> >
4095
boost::proto::tag::minus,
4096
field_indirect_const<T1,M> const &,
4097
field_component_const<T2,M> const &
4099
operator- (field_indirect_const<T1,M> const &left, field_component_const<T2,M> const &right)
4101
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
4103
#endif // BOOST_VERSION
4104
template<class T1, class T2, class M>
4105
#if BOOST_VERSION < 104601
4107
boost::proto::detail::enable_binary<
4109
is_field<field_component<T1,M> >,
4110
field_component<T1,M>,
4111
is_field<field_basic<T2,M> >,
4113
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4114
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>::result_type const
4116
operator- (const field_component<T1,M>& l, const field_basic<T2,M>& r)
4118
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4119
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>() (l, r);
4121
#else // BOOST_VERSION >= 104601
4122
typename boost::proto::detail::enable_binary<
4124
field_domain::proto_grammar,
4126
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
4129
boost::proto::is_extension<field_component<T1,M> >,
4130
boost::proto::is_extension<field_basic<T2,M> >
4134
boost::proto::tag::minus,
4135
field_component<T1,M> const &,
4136
field_basic<T2,M> const &
4138
operator- (field_component<T1,M> const &left, field_basic<T2,M> const &right)
4140
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M> const &, field_basic<T2,M> const &>()(left, right);
4142
#endif // BOOST_VERSION
4143
template<class T1, class T2, class M>
4144
#if BOOST_VERSION < 104601
4146
boost::proto::detail::enable_binary<
4148
is_field<field_component<T1,M> >,
4149
field_component<T1,M>,
4150
is_field<field_indirect<T2,M> >,
4151
field_indirect<T2,M>,
4152
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4153
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>::result_type const
4155
operator- (const field_component<T1,M>& l, const field_indirect<T2,M>& r)
4157
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4158
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>() (l, r);
4160
#else // BOOST_VERSION >= 104601
4161
typename boost::proto::detail::enable_binary<
4163
field_domain::proto_grammar,
4165
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
4168
boost::proto::is_extension<field_component<T1,M> >,
4169
boost::proto::is_extension<field_indirect<T2,M> >
4173
boost::proto::tag::minus,
4174
field_component<T1,M> const &,
4175
field_indirect<T2,M> const &
4177
operator- (field_component<T1,M> const &left, field_indirect<T2,M> const &right)
4179
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
4181
#endif // BOOST_VERSION
4182
template<class T1, class T2, class M>
4183
#if BOOST_VERSION < 104601
4185
boost::proto::detail::enable_binary<
4187
is_field<field_component<T1,M> >,
4188
field_component<T1,M>,
4189
is_field<field_indirect_const<T2,M> >,
4190
field_indirect_const<T2,M>,
4191
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4192
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
4194
operator- (const field_component<T1,M>& l, const field_indirect_const<T2,M>& r)
4196
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4197
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
4199
#else // BOOST_VERSION >= 104601
4200
typename boost::proto::detail::enable_binary<
4202
field_domain::proto_grammar,
4204
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4207
boost::proto::is_extension<field_component<T1,M> >,
4208
boost::proto::is_extension<field_indirect_const<T2,M> >
4212
boost::proto::tag::minus,
4213
field_component<T1,M> const &,
4214
field_indirect_const<T2,M> const &
4216
operator- (field_component<T1,M> const &left, field_indirect_const<T2,M> const &right)
4218
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
4220
#endif // BOOST_VERSION
4221
template<class T1, class T2, class M>
4222
#if BOOST_VERSION < 104601
4224
boost::proto::detail::enable_binary<
4226
is_field<field_component<T1,M> >,
4227
field_component<T1,M>,
4228
is_field<field_component<T2,M> >,
4229
field_component<T2,M>,
4230
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4231
::impl<const field_component<T1,M>&, const field_component<T2,M>&>::result_type const
4233
operator- (const field_component<T1,M>& l, const field_component<T2,M>& r)
4235
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4236
::impl<const field_component<T1,M>&, const field_component<T2,M>&>() (l, r);
4238
#else // BOOST_VERSION >= 104601
4239
typename boost::proto::detail::enable_binary<
4241
field_domain::proto_grammar,
4243
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
4246
boost::proto::is_extension<field_component<T1,M> >,
4247
boost::proto::is_extension<field_component<T2,M> >
4251
boost::proto::tag::minus,
4252
field_component<T1,M> const &,
4253
field_component<T2,M> const &
4255
operator- (field_component<T1,M> const &left, field_component<T2,M> const &right)
4257
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M> const &, field_component<T2,M> const &>()(left, right);
4259
#endif // BOOST_VERSION
4260
template<class T1, class T2, class M>
4261
#if BOOST_VERSION < 104601
4263
boost::proto::detail::enable_binary<
4265
is_field<field_component<T1,M> >,
4266
field_component<T1,M>,
4267
is_field<field_component_const<T2,M> >,
4268
field_component_const<T2,M>,
4269
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4270
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>::result_type const
4272
operator- (const field_component<T1,M>& l, const field_component_const<T2,M>& r)
4274
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4275
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>() (l, r);
4277
#else // BOOST_VERSION >= 104601
4278
typename boost::proto::detail::enable_binary<
4280
field_domain::proto_grammar,
4282
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
4285
boost::proto::is_extension<field_component<T1,M> >,
4286
boost::proto::is_extension<field_component_const<T2,M> >
4290
boost::proto::tag::minus,
4291
field_component<T1,M> const &,
4292
field_component_const<T2,M> const &
4294
operator- (field_component<T1,M> const &left, field_component_const<T2,M> const &right)
4296
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
4298
#endif // BOOST_VERSION
4299
template<class T1, class T2, class M>
4300
#if BOOST_VERSION < 104601
4302
boost::proto::detail::enable_binary<
4304
is_field<field_component_const<T1,M> >,
4305
field_component_const<T1,M>,
4306
is_field<field_basic<T2,M> >,
4308
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4309
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>::result_type const
4311
operator- (const field_component_const<T1,M>& l, const field_basic<T2,M>& r)
4313
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4314
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>() (l, r);
4316
#else // BOOST_VERSION >= 104601
4317
typename boost::proto::detail::enable_binary<
4319
field_domain::proto_grammar,
4321
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
4324
boost::proto::is_extension<field_component_const<T1,M> >,
4325
boost::proto::is_extension<field_basic<T2,M> >
4329
boost::proto::tag::minus,
4330
field_component_const<T1,M> const &,
4331
field_basic<T2,M> const &
4333
operator- (field_component_const<T1,M> const &left, field_basic<T2,M> const &right)
4335
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T1,M> const &, field_basic<T2,M> const &>()(left, right);
4337
#endif // BOOST_VERSION
4338
template<class T1, class T2, class M>
4339
#if BOOST_VERSION < 104601
4341
boost::proto::detail::enable_binary<
4343
is_field<field_component_const<T1,M> >,
4344
field_component_const<T1,M>,
4345
is_field<field_indirect<T2,M> >,
4346
field_indirect<T2,M>,
4347
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4348
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>::result_type const
4350
operator- (const field_component_const<T1,M>& l, const field_indirect<T2,M>& r)
4352
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4353
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>() (l, r);
4355
#else // BOOST_VERSION >= 104601
4356
typename boost::proto::detail::enable_binary<
4358
field_domain::proto_grammar,
4360
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
4363
boost::proto::is_extension<field_component_const<T1,M> >,
4364
boost::proto::is_extension<field_indirect<T2,M> >
4368
boost::proto::tag::minus,
4369
field_component_const<T1,M> const &,
4370
field_indirect<T2,M> const &
4372
operator- (field_component_const<T1,M> const &left, field_indirect<T2,M> const &right)
4374
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
4376
#endif // BOOST_VERSION
4377
template<class T1, class T2, class M>
4378
#if BOOST_VERSION < 104601
4380
boost::proto::detail::enable_binary<
4382
is_field<field_component_const<T1,M> >,
4383
field_component_const<T1,M>,
4384
is_field<field_indirect_const<T2,M> >,
4385
field_indirect_const<T2,M>,
4386
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4387
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
4389
operator- (const field_component_const<T1,M>& l, const field_indirect_const<T2,M>& r)
4391
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4392
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
4394
#else // BOOST_VERSION >= 104601
4395
typename boost::proto::detail::enable_binary<
4397
field_domain::proto_grammar,
4399
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4402
boost::proto::is_extension<field_component_const<T1,M> >,
4403
boost::proto::is_extension<field_indirect_const<T2,M> >
4407
boost::proto::tag::minus,
4408
field_component_const<T1,M> const &,
4409
field_indirect_const<T2,M> const &
4411
operator- (field_component_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
4413
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
4415
#endif // BOOST_VERSION
4416
template<class T1, class T2, class M>
4417
#if BOOST_VERSION < 104601
4419
boost::proto::detail::enable_binary<
4421
is_field<field_component_const<T1,M> >,
4422
field_component_const<T1,M>,
4423
is_field<field_component<T2,M> >,
4424
field_component<T2,M>,
4425
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4426
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>::result_type const
4428
operator- (const field_component_const<T1,M>& l, const field_component<T2,M>& r)
4430
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4431
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>() (l, r);
4433
#else // BOOST_VERSION >= 104601
4434
typename boost::proto::detail::enable_binary<
4436
field_domain::proto_grammar,
4438
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
4441
boost::proto::is_extension<field_component_const<T1,M> >,
4442
boost::proto::is_extension<field_component<T2,M> >
4446
boost::proto::tag::minus,
4447
field_component_const<T1,M> const &,
4448
field_component<T2,M> const &
4450
operator- (field_component_const<T1,M> const &left, field_component<T2,M> const &right)
4452
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
4454
#endif // BOOST_VERSION
4455
template<class T1, class T2, class M>
4456
#if BOOST_VERSION < 104601
4458
boost::proto::detail::enable_binary<
4460
is_field<field_component_const<T1,M> >,
4461
field_component_const<T1,M>,
4462
is_field<field_component_const<T2,M> >,
4463
field_component_const<T2,M>,
4464
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4465
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
4467
operator- (const field_component_const<T1,M>& l, const field_component_const<T2,M>& r)
4469
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4470
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
4472
#else // BOOST_VERSION >= 104601
4473
typename boost::proto::detail::enable_binary<
4475
field_domain::proto_grammar,
4477
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
4480
boost::proto::is_extension<field_component_const<T1,M> >,
4481
boost::proto::is_extension<field_component_const<T2,M> >
4485
boost::proto::tag::minus,
4486
field_component_const<T1,M> const &,
4487
field_component_const<T2,M> const &
4489
operator- (field_component_const<T1,M> const &left, field_component_const<T2,M> const &right)
4491
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
4493
#endif // BOOST_VERSION
990
4494
template<class Expr>
4495
#if BOOST_VERSION < 104601
992
4497
boost::proto::detail::enable_binary<
1145
4857
operator- (const field_expr<Expr>& l, const field_indirect_const<T,M>& r)
1147
4859
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
1148
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
4860
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
4862
#else // BOOST_VERSION >= 104601
4863
typename boost::proto::detail::enable_binary<
4865
field_domain::proto_grammar,
4867
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
4870
boost::proto::is_extension<field_expr<Expr> >,
4871
boost::proto::is_extension<field_indirect_const<T,M> >
4875
boost::proto::tag::minus,
4876
field_expr<Expr> const &,
4877
field_indirect_const<T,M> const &
4879
operator- (field_expr<Expr> const &left, field_indirect_const<T,M> const &right)
4881
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr> const &, field_indirect_const<T,M> const &>()(left, right);
4883
#endif // BOOST_VERSION
4884
template<class T, class M, class Expr>
4885
#if BOOST_VERSION < 104601
4887
boost::proto::detail::enable_binary<
4889
is_field<field_component<T,M> >,
4890
field_component<T,M>,
4891
is_field<field_expr<Expr> >,
4893
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4894
::impl<const field_component<T,M>&, const field_expr<Expr>&>::result_type const
4896
operator- (const field_component<T,M>& l, const field_expr<Expr>& r)
4898
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4899
::impl<const field_component<T,M>&, const field_expr<Expr>&>() (l, r);
4901
#else // BOOST_VERSION >= 104601
4902
typename boost::proto::detail::enable_binary<
4904
field_domain::proto_grammar,
4906
boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
4909
boost::proto::is_extension<field_component<T,M> >,
4910
boost::proto::is_extension<field_expr<Expr> >
4914
boost::proto::tag::minus,
4915
field_component<T,M> const &,
4916
field_expr<Expr> const &
4918
operator- (field_component<T,M> const &left, field_expr<Expr> const &right)
4920
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M> const &, field_expr<Expr> const &>()(left, right);
4922
#endif // BOOST_VERSION
4923
template<class T, class M, class Expr>
4924
#if BOOST_VERSION < 104601
4926
boost::proto::detail::enable_binary<
4928
is_field<field_expr<Expr> >,
4930
is_field<field_component<T,M> >,
4931
field_component<T,M>,
4932
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4933
::impl<const field_expr<Expr>&, const field_component<T,M>&>::result_type const
4935
operator- (const field_expr<Expr>& l, const field_component<T,M>& r)
4937
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4938
::impl<const field_expr<Expr>&, const field_component<T,M>&>() (l, r);
4940
#else // BOOST_VERSION >= 104601
4941
typename boost::proto::detail::enable_binary<
4943
field_domain::proto_grammar,
4945
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
4948
boost::proto::is_extension<field_expr<Expr> >,
4949
boost::proto::is_extension<field_component<T,M> >
4953
boost::proto::tag::minus,
4954
field_expr<Expr> const &,
4955
field_component<T,M> const &
4957
operator- (field_expr<Expr> const &left, field_component<T,M> const &right)
4959
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr> const &, field_component<T,M> const &>()(left, right);
4961
#endif // BOOST_VERSION
4962
template<class T, class M, class Expr>
4963
#if BOOST_VERSION < 104601
4965
boost::proto::detail::enable_binary<
4967
is_field<field_component_const<T,M> >,
4968
field_component_const<T,M>,
4969
is_field<field_expr<Expr> >,
4971
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4972
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>::result_type const
4974
operator- (const field_component_const<T,M>& l, const field_expr<Expr>& r)
4976
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4977
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>() (l, r);
4979
#else // BOOST_VERSION >= 104601
4980
typename boost::proto::detail::enable_binary<
4982
field_domain::proto_grammar,
4984
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
4987
boost::proto::is_extension<field_component_const<T,M> >,
4988
boost::proto::is_extension<field_expr<Expr> >
4992
boost::proto::tag::minus,
4993
field_component_const<T,M> const &,
4994
field_expr<Expr> const &
4996
operator- (field_component_const<T,M> const &left, field_expr<Expr> const &right)
4998
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M> const &, field_expr<Expr> const &>()(left, right);
5000
#endif // BOOST_VERSION
5001
template<class T, class M, class Expr>
5002
#if BOOST_VERSION < 104601
5004
boost::proto::detail::enable_binary<
5006
is_field<field_expr<Expr> >,
5008
is_field<field_component_const<T,M> >,
5009
field_component_const<T,M>,
5010
typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
5011
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>::result_type const
5013
operator- (const field_expr<Expr>& l, const field_component_const<T,M>& r)
5015
return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
5016
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>() (l, r);
5018
#else // BOOST_VERSION >= 104601
5019
typename boost::proto::detail::enable_binary<
5021
field_domain::proto_grammar,
5023
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
5026
boost::proto::is_extension<field_expr<Expr> >,
5027
boost::proto::is_extension<field_component_const<T,M> >
5031
boost::proto::tag::minus,
5032
field_expr<Expr> const &,
5033
field_component_const<T,M> const &
5035
operator- (field_expr<Expr> const &left, field_component_const<T,M> const &right)
5037
return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr> const &, field_component_const<T,M> const &>()(left, right);
5039
#endif // BOOST_VERSION
1150
5040
template<class Expr1, class Expr2>
5041
#if BOOST_VERSION < 104601
1152
5043
boost::proto::detail::enable_binary<
1257
5286
operator* (const T& l, const field_indirect_const<T,M>& r)
1259
5288
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1260
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
1262
template<class T, class M>
5289
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
5291
#else // BOOST_VERSION >= 104601
5292
typename boost::proto::detail::enable_binary<
5294
field_domain::proto_grammar,
5296
boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
5299
boost::proto::is_extension<T >,
5300
boost::proto::is_extension<field_indirect_const<T,M> >
5304
boost::proto::tag::multiplies,
5306
field_indirect_const<T,M> const &
5308
operator* (T const &left, field_indirect_const<T,M> const &right)
5310
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_indirect_const<T,M> const &>()(left, right);
5312
#endif // BOOST_VERSION
5313
template<class T, class M>
5314
#if BOOST_VERSION < 104601
5316
boost::proto::detail::enable_binary<
5320
is_field<field_component<T,M> >,
5321
field_component<T,M>,
5322
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5323
::impl<const int&, const field_component<T,M>&>::result_type const
5325
operator* (const int& l, const field_component<T,M>& r)
5327
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5328
::impl<const int&, const field_component<T,M>&>() (l, r);
5330
#else // BOOST_VERSION >= 104601
5331
typename boost::proto::detail::enable_binary<
5333
field_domain::proto_grammar,
5335
boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
5338
boost::proto::is_extension<int >,
5339
boost::proto::is_extension<field_component<T,M> >
5343
boost::proto::tag::multiplies,
5345
field_component<T,M> const &
5347
operator* (int const &left, field_component<T,M> const &right)
5349
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_component<T,M> const &>()(left, right);
5351
#endif // BOOST_VERSION
5352
template<class T, class M>
5353
#if BOOST_VERSION < 104601
5355
boost::proto::detail::enable_binary<
5359
is_field<field_component<T,M> >,
5360
field_component<T,M>,
5361
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5362
::impl<const T&, const field_component<T,M>&>::result_type const
5364
operator* (const T& l, const field_component<T,M>& r)
5366
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5367
::impl<const T&, const field_component<T,M>&>() (l, r);
5369
#else // BOOST_VERSION >= 104601
5370
typename boost::proto::detail::enable_binary<
5372
field_domain::proto_grammar,
5374
boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
5377
boost::proto::is_extension<T >,
5378
boost::proto::is_extension<field_component<T,M> >
5382
boost::proto::tag::multiplies,
5384
field_component<T,M> const &
5386
operator* (T const &left, field_component<T,M> const &right)
5388
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_component<T,M> const &>()(left, right);
5390
#endif // BOOST_VERSION
5391
template<class T, class M>
5392
#if BOOST_VERSION < 104601
5394
boost::proto::detail::enable_binary<
5398
is_field<field_component_const<T,M> >,
5399
field_component_const<T,M>,
5400
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5401
::impl<const int&, const field_component_const<T,M>&>::result_type const
5403
operator* (const int& l, const field_component_const<T,M>& r)
5405
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5406
::impl<const int&, const field_component_const<T,M>&>() (l, r);
5408
#else // BOOST_VERSION >= 104601
5409
typename boost::proto::detail::enable_binary<
5411
field_domain::proto_grammar,
5413
boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
5416
boost::proto::is_extension<int >,
5417
boost::proto::is_extension<field_component_const<T,M> >
5421
boost::proto::tag::multiplies,
5423
field_component_const<T,M> const &
5425
operator* (int const &left, field_component_const<T,M> const &right)
5427
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_component_const<T,M> const &>()(left, right);
5429
#endif // BOOST_VERSION
5430
template<class T, class M>
5431
#if BOOST_VERSION < 104601
5433
boost::proto::detail::enable_binary<
5437
is_field<field_component_const<T,M> >,
5438
field_component_const<T,M>,
5439
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5440
::impl<const T&, const field_component_const<T,M>&>::result_type const
5442
operator* (const T& l, const field_component_const<T,M>& r)
5444
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5445
::impl<const T&, const field_component_const<T,M>&>() (l, r);
5447
#else // BOOST_VERSION >= 104601
5448
typename boost::proto::detail::enable_binary<
5450
field_domain::proto_grammar,
5452
boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
5455
boost::proto::is_extension<T >,
5456
boost::proto::is_extension<field_component_const<T,M> >
5460
boost::proto::tag::multiplies,
5462
field_component_const<T,M> const &
5464
operator* (T const &left, field_component_const<T,M> const &right)
5466
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_component_const<T,M> const &>()(left, right);
5468
#endif // BOOST_VERSION
5469
template<class T, class M>
5470
#if BOOST_VERSION < 104601
1264
5472
boost::proto::detail::enable_binary<
1353
5676
operator* (const field_indirect_const<T,M>& l, const T& r)
1355
5678
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1356
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
5679
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
5681
#else // BOOST_VERSION >= 104601
5682
typename boost::proto::detail::enable_binary<
5684
field_domain::proto_grammar,
5686
boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
5689
boost::proto::is_extension<field_indirect_const<T,M> >,
5690
boost::proto::is_extension<T >
5694
boost::proto::tag::multiplies,
5695
field_indirect_const<T,M> const &,
5698
operator* (field_indirect_const<T,M> const &left, T const &right)
5700
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T,M> const &, T const &>()(left, right);
5702
#endif // BOOST_VERSION
5703
template<class T, class M>
5704
#if BOOST_VERSION < 104601
5706
boost::proto::detail::enable_binary<
5708
is_field<field_component<T,M> >,
5709
field_component<T,M>,
5712
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5713
::impl<const field_component<T,M>&, const int&>::result_type const
5715
operator* (const field_component<T,M>& l, const int& r)
5717
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5718
::impl<const field_component<T,M>&, const int&>() (l, r);
5720
#else // BOOST_VERSION >= 104601
5721
typename boost::proto::detail::enable_binary<
5723
field_domain::proto_grammar,
5725
boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
5728
boost::proto::is_extension<field_component<T,M> >,
5729
boost::proto::is_extension<int >
5733
boost::proto::tag::multiplies,
5734
field_component<T,M> const &,
5737
operator* (field_component<T,M> const &left, int const &right)
5739
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T,M> const &, int const &>()(left, right);
5741
#endif // BOOST_VERSION
5742
template<class T, class M>
5743
#if BOOST_VERSION < 104601
5745
boost::proto::detail::enable_binary<
5747
is_field<field_component<T,M> >,
5748
field_component<T,M>,
5751
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5752
::impl<const field_component<T,M>&, const T&>::result_type const
5754
operator* (const field_component<T,M>& l, const T& r)
5756
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5757
::impl<const field_component<T,M>&, const T&>() (l, r);
5759
#else // BOOST_VERSION >= 104601
5760
typename boost::proto::detail::enable_binary<
5762
field_domain::proto_grammar,
5764
boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
5767
boost::proto::is_extension<field_component<T,M> >,
5768
boost::proto::is_extension<T >
5772
boost::proto::tag::multiplies,
5773
field_component<T,M> const &,
5776
operator* (field_component<T,M> const &left, T const &right)
5778
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T,M> const &, T const &>()(left, right);
5780
#endif // BOOST_VERSION
5781
template<class T, class M>
5782
#if BOOST_VERSION < 104601
5784
boost::proto::detail::enable_binary<
5786
is_field<field_component_const<T,M> >,
5787
field_component_const<T,M>,
5790
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5791
::impl<const field_component_const<T,M>&, const int&>::result_type const
5793
operator* (const field_component_const<T,M>& l, const int& r)
5795
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5796
::impl<const field_component_const<T,M>&, const int&>() (l, r);
5798
#else // BOOST_VERSION >= 104601
5799
typename boost::proto::detail::enable_binary<
5801
field_domain::proto_grammar,
5803
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
5806
boost::proto::is_extension<field_component_const<T,M> >,
5807
boost::proto::is_extension<int >
5811
boost::proto::tag::multiplies,
5812
field_component_const<T,M> const &,
5815
operator* (field_component_const<T,M> const &left, int const &right)
5817
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T,M> const &, int const &>()(left, right);
5819
#endif // BOOST_VERSION
5820
template<class T, class M>
5821
#if BOOST_VERSION < 104601
5823
boost::proto::detail::enable_binary<
5825
is_field<field_component_const<T,M> >,
5826
field_component_const<T,M>,
5829
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5830
::impl<const field_component_const<T,M>&, const T&>::result_type const
5832
operator* (const field_component_const<T,M>& l, const T& r)
5834
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5835
::impl<const field_component_const<T,M>&, const T&>() (l, r);
5837
#else // BOOST_VERSION >= 104601
5838
typename boost::proto::detail::enable_binary<
5840
field_domain::proto_grammar,
5842
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
5845
boost::proto::is_extension<field_component_const<T,M> >,
5846
boost::proto::is_extension<T >
5850
boost::proto::tag::multiplies,
5851
field_component_const<T,M> const &,
5854
operator* (field_component_const<T,M> const &left, T const &right)
5856
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T,M> const &, T const &>()(left, right);
5858
#endif // BOOST_VERSION
1358
5859
template<class T1, class T2, class M>
5860
#if BOOST_VERSION < 104601
1360
5862
boost::proto::detail::enable_binary<
1401
5949
operator* (const field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
1403
5951
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1404
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1406
template<class T1, class T2, class M>
5952
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
5954
#else // BOOST_VERSION >= 104601
5955
typename boost::proto::detail::enable_binary<
5957
field_domain::proto_grammar,
5959
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
5962
boost::proto::is_extension<field_basic<T1,M> >,
5963
boost::proto::is_extension<field_indirect_const<T2,M> >
5967
boost::proto::tag::multiplies,
5968
field_basic<T1,M> const &,
5969
field_indirect_const<T2,M> const &
5971
operator* (field_basic<T1,M> const &left, field_indirect_const<T2,M> const &right)
5973
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_basic<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
5975
#endif // BOOST_VERSION
5976
template<class T1, class T2, class M>
5977
#if BOOST_VERSION < 104601
5979
boost::proto::detail::enable_binary<
5981
is_field<field_basic<T1,M> >,
5983
is_field<field_component<T2,M> >,
5984
field_component<T2,M>,
5985
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5986
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>::result_type const
5988
operator* (const field_basic<T1,M>& l, const field_component<T2,M>& r)
5990
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5991
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>() (l, r);
5993
#else // BOOST_VERSION >= 104601
5994
typename boost::proto::detail::enable_binary<
5996
field_domain::proto_grammar,
5998
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
6001
boost::proto::is_extension<field_basic<T1,M> >,
6002
boost::proto::is_extension<field_component<T2,M> >
6006
boost::proto::tag::multiplies,
6007
field_basic<T1,M> const &,
6008
field_component<T2,M> const &
6010
operator* (field_basic<T1,M> const &left, field_component<T2,M> const &right)
6012
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_basic<T1,M> const &, field_component<T2,M> const &>()(left, right);
6014
#endif // BOOST_VERSION
6015
template<class T1, class T2, class M>
6016
#if BOOST_VERSION < 104601
6018
boost::proto::detail::enable_binary<
6020
is_field<field_basic<T1,M> >,
6022
is_field<field_component_const<T2,M> >,
6023
field_component_const<T2,M>,
6024
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6025
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>::result_type const
6027
operator* (const field_basic<T1,M>& l, const field_component_const<T2,M>& r)
6029
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6030
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>() (l, r);
6032
#else // BOOST_VERSION >= 104601
6033
typename boost::proto::detail::enable_binary<
6035
field_domain::proto_grammar,
6037
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
6040
boost::proto::is_extension<field_basic<T1,M> >,
6041
boost::proto::is_extension<field_component_const<T2,M> >
6045
boost::proto::tag::multiplies,
6046
field_basic<T1,M> const &,
6047
field_component_const<T2,M> const &
6049
operator* (field_basic<T1,M> const &left, field_component_const<T2,M> const &right)
6051
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_basic<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
6053
#endif // BOOST_VERSION
6054
template<class T1, class T2, class M>
6055
#if BOOST_VERSION < 104601
1408
6057
boost::proto::detail::enable_binary<
1449
6144
operator* (const field_indirect<T1,M>& l, const field_indirect_const<T2,M>& r)
1451
6146
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1452
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1454
template<class T1, class T2, class M>
6147
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
6149
#else // BOOST_VERSION >= 104601
6150
typename boost::proto::detail::enable_binary<
6152
field_domain::proto_grammar,
6154
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
6157
boost::proto::is_extension<field_indirect<T1,M> >,
6158
boost::proto::is_extension<field_indirect_const<T2,M> >
6162
boost::proto::tag::multiplies,
6163
field_indirect<T1,M> const &,
6164
field_indirect_const<T2,M> const &
6166
operator* (field_indirect<T1,M> const &left, field_indirect_const<T2,M> const &right)
6168
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
6170
#endif // BOOST_VERSION
6171
template<class T1, class T2, class M>
6172
#if BOOST_VERSION < 104601
6174
boost::proto::detail::enable_binary<
6176
is_field<field_indirect<T1,M> >,
6177
field_indirect<T1,M>,
6178
is_field<field_component<T2,M> >,
6179
field_component<T2,M>,
6180
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6181
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>::result_type const
6183
operator* (const field_indirect<T1,M>& l, const field_component<T2,M>& r)
6185
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6186
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>() (l, r);
6188
#else // BOOST_VERSION >= 104601
6189
typename boost::proto::detail::enable_binary<
6191
field_domain::proto_grammar,
6193
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
6196
boost::proto::is_extension<field_indirect<T1,M> >,
6197
boost::proto::is_extension<field_component<T2,M> >
6201
boost::proto::tag::multiplies,
6202
field_indirect<T1,M> const &,
6203
field_component<T2,M> const &
6205
operator* (field_indirect<T1,M> const &left, field_component<T2,M> const &right)
6207
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect<T1,M> const &, field_component<T2,M> const &>()(left, right);
6209
#endif // BOOST_VERSION
6210
template<class T1, class T2, class M>
6211
#if BOOST_VERSION < 104601
6213
boost::proto::detail::enable_binary<
6215
is_field<field_indirect<T1,M> >,
6216
field_indirect<T1,M>,
6217
is_field<field_component_const<T2,M> >,
6218
field_component_const<T2,M>,
6219
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6220
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>::result_type const
6222
operator* (const field_indirect<T1,M>& l, const field_component_const<T2,M>& r)
6224
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6225
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>() (l, r);
6227
#else // BOOST_VERSION >= 104601
6228
typename boost::proto::detail::enable_binary<
6230
field_domain::proto_grammar,
6232
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
6235
boost::proto::is_extension<field_indirect<T1,M> >,
6236
boost::proto::is_extension<field_component_const<T2,M> >
6240
boost::proto::tag::multiplies,
6241
field_indirect<T1,M> const &,
6242
field_component_const<T2,M> const &
6244
operator* (field_indirect<T1,M> const &left, field_component_const<T2,M> const &right)
6246
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
6248
#endif // BOOST_VERSION
6249
template<class T1, class T2, class M>
6250
#if BOOST_VERSION < 104601
1456
6252
boost::proto::detail::enable_binary<
1497
6339
operator* (const field_indirect_const<T1,M>& l, const field_indirect_const<T2,M>& r)
1499
6341
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1500
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
6342
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
6344
#else // BOOST_VERSION >= 104601
6345
typename boost::proto::detail::enable_binary<
6347
field_domain::proto_grammar,
6349
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
6352
boost::proto::is_extension<field_indirect_const<T1,M> >,
6353
boost::proto::is_extension<field_indirect_const<T2,M> >
6357
boost::proto::tag::multiplies,
6358
field_indirect_const<T1,M> const &,
6359
field_indirect_const<T2,M> const &
6361
operator* (field_indirect_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
6363
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
6365
#endif // BOOST_VERSION
6366
template<class T1, class T2, class M>
6367
#if BOOST_VERSION < 104601
6369
boost::proto::detail::enable_binary<
6371
is_field<field_indirect_const<T1,M> >,
6372
field_indirect_const<T1,M>,
6373
is_field<field_component<T2,M> >,
6374
field_component<T2,M>,
6375
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6376
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>::result_type const
6378
operator* (const field_indirect_const<T1,M>& l, const field_component<T2,M>& r)
6380
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6381
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>() (l, r);
6383
#else // BOOST_VERSION >= 104601
6384
typename boost::proto::detail::enable_binary<
6386
field_domain::proto_grammar,
6388
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
6391
boost::proto::is_extension<field_indirect_const<T1,M> >,
6392
boost::proto::is_extension<field_component<T2,M> >
6396
boost::proto::tag::multiplies,
6397
field_indirect_const<T1,M> const &,
6398
field_component<T2,M> const &
6400
operator* (field_indirect_const<T1,M> const &left, field_component<T2,M> const &right)
6402
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
6404
#endif // BOOST_VERSION
6405
template<class T1, class T2, class M>
6406
#if BOOST_VERSION < 104601
6408
boost::proto::detail::enable_binary<
6410
is_field<field_indirect_const<T1,M> >,
6411
field_indirect_const<T1,M>,
6412
is_field<field_component_const<T2,M> >,
6413
field_component_const<T2,M>,
6414
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6415
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
6417
operator* (const field_indirect_const<T1,M>& l, const field_component_const<T2,M>& r)
6419
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6420
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
6422
#else // BOOST_VERSION >= 104601
6423
typename boost::proto::detail::enable_binary<
6425
field_domain::proto_grammar,
6427
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
6430
boost::proto::is_extension<field_indirect_const<T1,M> >,
6431
boost::proto::is_extension<field_component_const<T2,M> >
6435
boost::proto::tag::multiplies,
6436
field_indirect_const<T1,M> const &,
6437
field_component_const<T2,M> const &
6439
operator* (field_indirect_const<T1,M> const &left, field_component_const<T2,M> const &right)
6441
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
6443
#endif // BOOST_VERSION
6444
template<class T1, class T2, class M>
6445
#if BOOST_VERSION < 104601
6447
boost::proto::detail::enable_binary<
6449
is_field<field_component<T1,M> >,
6450
field_component<T1,M>,
6451
is_field<field_basic<T2,M> >,
6453
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6454
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>::result_type const
6456
operator* (const field_component<T1,M>& l, const field_basic<T2,M>& r)
6458
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6459
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>() (l, r);
6461
#else // BOOST_VERSION >= 104601
6462
typename boost::proto::detail::enable_binary<
6464
field_domain::proto_grammar,
6466
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
6469
boost::proto::is_extension<field_component<T1,M> >,
6470
boost::proto::is_extension<field_basic<T2,M> >
6474
boost::proto::tag::multiplies,
6475
field_component<T1,M> const &,
6476
field_basic<T2,M> const &
6478
operator* (field_component<T1,M> const &left, field_basic<T2,M> const &right)
6480
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T1,M> const &, field_basic<T2,M> const &>()(left, right);
6482
#endif // BOOST_VERSION
6483
template<class T1, class T2, class M>
6484
#if BOOST_VERSION < 104601
6486
boost::proto::detail::enable_binary<
6488
is_field<field_component<T1,M> >,
6489
field_component<T1,M>,
6490
is_field<field_indirect<T2,M> >,
6491
field_indirect<T2,M>,
6492
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6493
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>::result_type const
6495
operator* (const field_component<T1,M>& l, const field_indirect<T2,M>& r)
6497
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6498
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>() (l, r);
6500
#else // BOOST_VERSION >= 104601
6501
typename boost::proto::detail::enable_binary<
6503
field_domain::proto_grammar,
6505
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
6508
boost::proto::is_extension<field_component<T1,M> >,
6509
boost::proto::is_extension<field_indirect<T2,M> >
6513
boost::proto::tag::multiplies,
6514
field_component<T1,M> const &,
6515
field_indirect<T2,M> const &
6517
operator* (field_component<T1,M> const &left, field_indirect<T2,M> const &right)
6519
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
6521
#endif // BOOST_VERSION
6522
template<class T1, class T2, class M>
6523
#if BOOST_VERSION < 104601
6525
boost::proto::detail::enable_binary<
6527
is_field<field_component<T1,M> >,
6528
field_component<T1,M>,
6529
is_field<field_indirect_const<T2,M> >,
6530
field_indirect_const<T2,M>,
6531
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6532
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
6534
operator* (const field_component<T1,M>& l, const field_indirect_const<T2,M>& r)
6536
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6537
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
6539
#else // BOOST_VERSION >= 104601
6540
typename boost::proto::detail::enable_binary<
6542
field_domain::proto_grammar,
6544
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
6547
boost::proto::is_extension<field_component<T1,M> >,
6548
boost::proto::is_extension<field_indirect_const<T2,M> >
6552
boost::proto::tag::multiplies,
6553
field_component<T1,M> const &,
6554
field_indirect_const<T2,M> const &
6556
operator* (field_component<T1,M> const &left, field_indirect_const<T2,M> const &right)
6558
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
6560
#endif // BOOST_VERSION
6561
template<class T1, class T2, class M>
6562
#if BOOST_VERSION < 104601
6564
boost::proto::detail::enable_binary<
6566
is_field<field_component<T1,M> >,
6567
field_component<T1,M>,
6568
is_field<field_component<T2,M> >,
6569
field_component<T2,M>,
6570
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6571
::impl<const field_component<T1,M>&, const field_component<T2,M>&>::result_type const
6573
operator* (const field_component<T1,M>& l, const field_component<T2,M>& r)
6575
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6576
::impl<const field_component<T1,M>&, const field_component<T2,M>&>() (l, r);
6578
#else // BOOST_VERSION >= 104601
6579
typename boost::proto::detail::enable_binary<
6581
field_domain::proto_grammar,
6583
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
6586
boost::proto::is_extension<field_component<T1,M> >,
6587
boost::proto::is_extension<field_component<T2,M> >
6591
boost::proto::tag::multiplies,
6592
field_component<T1,M> const &,
6593
field_component<T2,M> const &
6595
operator* (field_component<T1,M> const &left, field_component<T2,M> const &right)
6597
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T1,M> const &, field_component<T2,M> const &>()(left, right);
6599
#endif // BOOST_VERSION
6600
template<class T1, class T2, class M>
6601
#if BOOST_VERSION < 104601
6603
boost::proto::detail::enable_binary<
6605
is_field<field_component<T1,M> >,
6606
field_component<T1,M>,
6607
is_field<field_component_const<T2,M> >,
6608
field_component_const<T2,M>,
6609
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6610
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>::result_type const
6612
operator* (const field_component<T1,M>& l, const field_component_const<T2,M>& r)
6614
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6615
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>() (l, r);
6617
#else // BOOST_VERSION >= 104601
6618
typename boost::proto::detail::enable_binary<
6620
field_domain::proto_grammar,
6622
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
6625
boost::proto::is_extension<field_component<T1,M> >,
6626
boost::proto::is_extension<field_component_const<T2,M> >
6630
boost::proto::tag::multiplies,
6631
field_component<T1,M> const &,
6632
field_component_const<T2,M> const &
6634
operator* (field_component<T1,M> const &left, field_component_const<T2,M> const &right)
6636
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
6638
#endif // BOOST_VERSION
6639
template<class T1, class T2, class M>
6640
#if BOOST_VERSION < 104601
6642
boost::proto::detail::enable_binary<
6644
is_field<field_component_const<T1,M> >,
6645
field_component_const<T1,M>,
6646
is_field<field_basic<T2,M> >,
6648
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6649
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>::result_type const
6651
operator* (const field_component_const<T1,M>& l, const field_basic<T2,M>& r)
6653
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6654
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>() (l, r);
6656
#else // BOOST_VERSION >= 104601
6657
typename boost::proto::detail::enable_binary<
6659
field_domain::proto_grammar,
6661
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
6664
boost::proto::is_extension<field_component_const<T1,M> >,
6665
boost::proto::is_extension<field_basic<T2,M> >
6669
boost::proto::tag::multiplies,
6670
field_component_const<T1,M> const &,
6671
field_basic<T2,M> const &
6673
operator* (field_component_const<T1,M> const &left, field_basic<T2,M> const &right)
6675
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T1,M> const &, field_basic<T2,M> const &>()(left, right);
6677
#endif // BOOST_VERSION
6678
template<class T1, class T2, class M>
6679
#if BOOST_VERSION < 104601
6681
boost::proto::detail::enable_binary<
6683
is_field<field_component_const<T1,M> >,
6684
field_component_const<T1,M>,
6685
is_field<field_indirect<T2,M> >,
6686
field_indirect<T2,M>,
6687
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6688
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>::result_type const
6690
operator* (const field_component_const<T1,M>& l, const field_indirect<T2,M>& r)
6692
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6693
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>() (l, r);
6695
#else // BOOST_VERSION >= 104601
6696
typename boost::proto::detail::enable_binary<
6698
field_domain::proto_grammar,
6700
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
6703
boost::proto::is_extension<field_component_const<T1,M> >,
6704
boost::proto::is_extension<field_indirect<T2,M> >
6708
boost::proto::tag::multiplies,
6709
field_component_const<T1,M> const &,
6710
field_indirect<T2,M> const &
6712
operator* (field_component_const<T1,M> const &left, field_indirect<T2,M> const &right)
6714
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
6716
#endif // BOOST_VERSION
6717
template<class T1, class T2, class M>
6718
#if BOOST_VERSION < 104601
6720
boost::proto::detail::enable_binary<
6722
is_field<field_component_const<T1,M> >,
6723
field_component_const<T1,M>,
6724
is_field<field_indirect_const<T2,M> >,
6725
field_indirect_const<T2,M>,
6726
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6727
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
6729
operator* (const field_component_const<T1,M>& l, const field_indirect_const<T2,M>& r)
6731
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6732
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
6734
#else // BOOST_VERSION >= 104601
6735
typename boost::proto::detail::enable_binary<
6737
field_domain::proto_grammar,
6739
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
6742
boost::proto::is_extension<field_component_const<T1,M> >,
6743
boost::proto::is_extension<field_indirect_const<T2,M> >
6747
boost::proto::tag::multiplies,
6748
field_component_const<T1,M> const &,
6749
field_indirect_const<T2,M> const &
6751
operator* (field_component_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
6753
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
6755
#endif // BOOST_VERSION
6756
template<class T1, class T2, class M>
6757
#if BOOST_VERSION < 104601
6759
boost::proto::detail::enable_binary<
6761
is_field<field_component_const<T1,M> >,
6762
field_component_const<T1,M>,
6763
is_field<field_component<T2,M> >,
6764
field_component<T2,M>,
6765
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6766
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>::result_type const
6768
operator* (const field_component_const<T1,M>& l, const field_component<T2,M>& r)
6770
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6771
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>() (l, r);
6773
#else // BOOST_VERSION >= 104601
6774
typename boost::proto::detail::enable_binary<
6776
field_domain::proto_grammar,
6778
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
6781
boost::proto::is_extension<field_component_const<T1,M> >,
6782
boost::proto::is_extension<field_component<T2,M> >
6786
boost::proto::tag::multiplies,
6787
field_component_const<T1,M> const &,
6788
field_component<T2,M> const &
6790
operator* (field_component_const<T1,M> const &left, field_component<T2,M> const &right)
6792
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
6794
#endif // BOOST_VERSION
6795
template<class T1, class T2, class M>
6796
#if BOOST_VERSION < 104601
6798
boost::proto::detail::enable_binary<
6800
is_field<field_component_const<T1,M> >,
6801
field_component_const<T1,M>,
6802
is_field<field_component_const<T2,M> >,
6803
field_component_const<T2,M>,
6804
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6805
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
6807
operator* (const field_component_const<T1,M>& l, const field_component_const<T2,M>& r)
6809
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
6810
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
6812
#else // BOOST_VERSION >= 104601
6813
typename boost::proto::detail::enable_binary<
6815
field_domain::proto_grammar,
6817
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
6820
boost::proto::is_extension<field_component_const<T1,M> >,
6821
boost::proto::is_extension<field_component_const<T2,M> >
6825
boost::proto::tag::multiplies,
6826
field_component_const<T1,M> const &,
6827
field_component_const<T2,M> const &
6829
operator* (field_component_const<T1,M> const &left, field_component_const<T2,M> const &right)
6831
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
6833
#endif // BOOST_VERSION
1502
6834
template<class Expr>
6835
#if BOOST_VERSION < 104601
1504
6837
boost::proto::detail::enable_binary<
1657
7197
operator* (const field_expr<Expr>& l, const field_indirect_const<T,M>& r)
1659
7199
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
1660
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
7200
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
7202
#else // BOOST_VERSION >= 104601
7203
typename boost::proto::detail::enable_binary<
7205
field_domain::proto_grammar,
7207
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
7210
boost::proto::is_extension<field_expr<Expr> >,
7211
boost::proto::is_extension<field_indirect_const<T,M> >
7215
boost::proto::tag::multiplies,
7216
field_expr<Expr> const &,
7217
field_indirect_const<T,M> const &
7219
operator* (field_expr<Expr> const &left, field_indirect_const<T,M> const &right)
7221
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_expr<Expr> const &, field_indirect_const<T,M> const &>()(left, right);
7223
#endif // BOOST_VERSION
7224
template<class T, class M, class Expr>
7225
#if BOOST_VERSION < 104601
7227
boost::proto::detail::enable_binary<
7229
is_field<field_component<T,M> >,
7230
field_component<T,M>,
7231
is_field<field_expr<Expr> >,
7233
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7234
::impl<const field_component<T,M>&, const field_expr<Expr>&>::result_type const
7236
operator* (const field_component<T,M>& l, const field_expr<Expr>& r)
7238
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7239
::impl<const field_component<T,M>&, const field_expr<Expr>&>() (l, r);
7241
#else // BOOST_VERSION >= 104601
7242
typename boost::proto::detail::enable_binary<
7244
field_domain::proto_grammar,
7246
boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
7249
boost::proto::is_extension<field_component<T,M> >,
7250
boost::proto::is_extension<field_expr<Expr> >
7254
boost::proto::tag::multiplies,
7255
field_component<T,M> const &,
7256
field_expr<Expr> const &
7258
operator* (field_component<T,M> const &left, field_expr<Expr> const &right)
7260
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T,M> const &, field_expr<Expr> const &>()(left, right);
7262
#endif // BOOST_VERSION
7263
template<class T, class M, class Expr>
7264
#if BOOST_VERSION < 104601
7266
boost::proto::detail::enable_binary<
7268
is_field<field_expr<Expr> >,
7270
is_field<field_component<T,M> >,
7271
field_component<T,M>,
7272
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7273
::impl<const field_expr<Expr>&, const field_component<T,M>&>::result_type const
7275
operator* (const field_expr<Expr>& l, const field_component<T,M>& r)
7277
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7278
::impl<const field_expr<Expr>&, const field_component<T,M>&>() (l, r);
7280
#else // BOOST_VERSION >= 104601
7281
typename boost::proto::detail::enable_binary<
7283
field_domain::proto_grammar,
7285
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
7288
boost::proto::is_extension<field_expr<Expr> >,
7289
boost::proto::is_extension<field_component<T,M> >
7293
boost::proto::tag::multiplies,
7294
field_expr<Expr> const &,
7295
field_component<T,M> const &
7297
operator* (field_expr<Expr> const &left, field_component<T,M> const &right)
7299
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_expr<Expr> const &, field_component<T,M> const &>()(left, right);
7301
#endif // BOOST_VERSION
7302
template<class T, class M, class Expr>
7303
#if BOOST_VERSION < 104601
7305
boost::proto::detail::enable_binary<
7307
is_field<field_component_const<T,M> >,
7308
field_component_const<T,M>,
7309
is_field<field_expr<Expr> >,
7311
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7312
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>::result_type const
7314
operator* (const field_component_const<T,M>& l, const field_expr<Expr>& r)
7316
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7317
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>() (l, r);
7319
#else // BOOST_VERSION >= 104601
7320
typename boost::proto::detail::enable_binary<
7322
field_domain::proto_grammar,
7324
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
7327
boost::proto::is_extension<field_component_const<T,M> >,
7328
boost::proto::is_extension<field_expr<Expr> >
7332
boost::proto::tag::multiplies,
7333
field_component_const<T,M> const &,
7334
field_expr<Expr> const &
7336
operator* (field_component_const<T,M> const &left, field_expr<Expr> const &right)
7338
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T,M> const &, field_expr<Expr> const &>()(left, right);
7340
#endif // BOOST_VERSION
7341
template<class T, class M, class Expr>
7342
#if BOOST_VERSION < 104601
7344
boost::proto::detail::enable_binary<
7346
is_field<field_expr<Expr> >,
7348
is_field<field_component_const<T,M> >,
7349
field_component_const<T,M>,
7350
typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7351
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>::result_type const
7353
operator* (const field_expr<Expr>& l, const field_component_const<T,M>& r)
7355
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
7356
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>() (l, r);
7358
#else // BOOST_VERSION >= 104601
7359
typename boost::proto::detail::enable_binary<
7361
field_domain::proto_grammar,
7363
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
7366
boost::proto::is_extension<field_expr<Expr> >,
7367
boost::proto::is_extension<field_component_const<T,M> >
7371
boost::proto::tag::multiplies,
7372
field_expr<Expr> const &,
7373
field_component_const<T,M> const &
7375
operator* (field_expr<Expr> const &left, field_component_const<T,M> const &right)
7377
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_expr<Expr> const &, field_component_const<T,M> const &>()(left, right);
7379
#endif // BOOST_VERSION
1662
7380
template<class Expr1, class Expr2>
7381
#if BOOST_VERSION < 104601
1664
7383
boost::proto::detail::enable_binary<
1769
7626
operator/ (const T& l, const field_indirect_const<T,M>& r)
1771
7628
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
1772
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
1774
template<class T, class M>
7629
::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
7631
#else // BOOST_VERSION >= 104601
7632
typename boost::proto::detail::enable_binary<
7634
field_domain::proto_grammar,
7636
boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
7639
boost::proto::is_extension<T >,
7640
boost::proto::is_extension<field_indirect_const<T,M> >
7644
boost::proto::tag::divides,
7646
field_indirect_const<T,M> const &
7648
operator/ (T const &left, field_indirect_const<T,M> const &right)
7650
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_indirect_const<T,M> const &>()(left, right);
7652
#endif // BOOST_VERSION
7653
template<class T, class M>
7654
#if BOOST_VERSION < 104601
7656
boost::proto::detail::enable_binary<
7660
is_field<field_component<T,M> >,
7661
field_component<T,M>,
7662
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7663
::impl<const int&, const field_component<T,M>&>::result_type const
7665
operator/ (const int& l, const field_component<T,M>& r)
7667
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7668
::impl<const int&, const field_component<T,M>&>() (l, r);
7670
#else // BOOST_VERSION >= 104601
7671
typename boost::proto::detail::enable_binary<
7673
field_domain::proto_grammar,
7675
boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
7678
boost::proto::is_extension<int >,
7679
boost::proto::is_extension<field_component<T,M> >
7683
boost::proto::tag::divides,
7685
field_component<T,M> const &
7687
operator/ (int const &left, field_component<T,M> const &right)
7689
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_component<T,M> const &>()(left, right);
7691
#endif // BOOST_VERSION
7692
template<class T, class M>
7693
#if BOOST_VERSION < 104601
7695
boost::proto::detail::enable_binary<
7699
is_field<field_component<T,M> >,
7700
field_component<T,M>,
7701
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7702
::impl<const T&, const field_component<T,M>&>::result_type const
7704
operator/ (const T& l, const field_component<T,M>& r)
7706
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7707
::impl<const T&, const field_component<T,M>&>() (l, r);
7709
#else // BOOST_VERSION >= 104601
7710
typename boost::proto::detail::enable_binary<
7712
field_domain::proto_grammar,
7714
boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
7717
boost::proto::is_extension<T >,
7718
boost::proto::is_extension<field_component<T,M> >
7722
boost::proto::tag::divides,
7724
field_component<T,M> const &
7726
operator/ (T const &left, field_component<T,M> const &right)
7728
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_component<T,M> const &>()(left, right);
7730
#endif // BOOST_VERSION
7731
template<class T, class M>
7732
#if BOOST_VERSION < 104601
7734
boost::proto::detail::enable_binary<
7738
is_field<field_component_const<T,M> >,
7739
field_component_const<T,M>,
7740
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7741
::impl<const int&, const field_component_const<T,M>&>::result_type const
7743
operator/ (const int& l, const field_component_const<T,M>& r)
7745
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7746
::impl<const int&, const field_component_const<T,M>&>() (l, r);
7748
#else // BOOST_VERSION >= 104601
7749
typename boost::proto::detail::enable_binary<
7751
field_domain::proto_grammar,
7753
boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
7756
boost::proto::is_extension<int >,
7757
boost::proto::is_extension<field_component_const<T,M> >
7761
boost::proto::tag::divides,
7763
field_component_const<T,M> const &
7765
operator/ (int const &left, field_component_const<T,M> const &right)
7767
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_component_const<T,M> const &>()(left, right);
7769
#endif // BOOST_VERSION
7770
template<class T, class M>
7771
#if BOOST_VERSION < 104601
7773
boost::proto::detail::enable_binary<
7777
is_field<field_component_const<T,M> >,
7778
field_component_const<T,M>,
7779
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7780
::impl<const T&, const field_component_const<T,M>&>::result_type const
7782
operator/ (const T& l, const field_component_const<T,M>& r)
7784
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
7785
::impl<const T&, const field_component_const<T,M>&>() (l, r);
7787
#else // BOOST_VERSION >= 104601
7788
typename boost::proto::detail::enable_binary<
7790
field_domain::proto_grammar,
7792
boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
7795
boost::proto::is_extension<T >,
7796
boost::proto::is_extension<field_component_const<T,M> >
7800
boost::proto::tag::divides,
7802
field_component_const<T,M> const &
7804
operator/ (T const &left, field_component_const<T,M> const &right)
7806
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_component_const<T,M> const &>()(left, right);
7808
#endif // BOOST_VERSION
7809
template<class T, class M>
7810
#if BOOST_VERSION < 104601
1776
7812
boost::proto::detail::enable_binary<
1865
8016
operator/ (const field_indirect_const<T,M>& l, const T& r)
1867
8018
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
1868
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
8019
::impl<const field_indirect_const<T,M>&, const T&>() (l, r);
8021
#else // BOOST_VERSION >= 104601
8022
typename boost::proto::detail::enable_binary<
8024
field_domain::proto_grammar,
8026
boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
8029
boost::proto::is_extension<field_indirect_const<T,M> >,
8030
boost::proto::is_extension<T >
8034
boost::proto::tag::divides,
8035
field_indirect_const<T,M> const &,
8038
operator/ (field_indirect_const<T,M> const &left, T const &right)
8040
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T,M> const &, T const &>()(left, right);
8042
#endif // BOOST_VERSION
8043
template<class T, class M>
8044
#if BOOST_VERSION < 104601
8046
boost::proto::detail::enable_binary<
8048
is_field<field_component<T,M> >,
8049
field_component<T,M>,
8052
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8053
::impl<const field_component<T,M>&, const int&>::result_type const
8055
operator/ (const field_component<T,M>& l, const int& r)
8057
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8058
::impl<const field_component<T,M>&, const int&>() (l, r);
8060
#else // BOOST_VERSION >= 104601
8061
typename boost::proto::detail::enable_binary<
8063
field_domain::proto_grammar,
8065
boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
8068
boost::proto::is_extension<field_component<T,M> >,
8069
boost::proto::is_extension<int >
8073
boost::proto::tag::divides,
8074
field_component<T,M> const &,
8077
operator/ (field_component<T,M> const &left, int const &right)
8079
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T,M> const &, int const &>()(left, right);
8081
#endif // BOOST_VERSION
8082
template<class T, class M>
8083
#if BOOST_VERSION < 104601
8085
boost::proto::detail::enable_binary<
8087
is_field<field_component<T,M> >,
8088
field_component<T,M>,
8091
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8092
::impl<const field_component<T,M>&, const T&>::result_type const
8094
operator/ (const field_component<T,M>& l, const T& r)
8096
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8097
::impl<const field_component<T,M>&, const T&>() (l, r);
8099
#else // BOOST_VERSION >= 104601
8100
typename boost::proto::detail::enable_binary<
8102
field_domain::proto_grammar,
8104
boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
8107
boost::proto::is_extension<field_component<T,M> >,
8108
boost::proto::is_extension<T >
8112
boost::proto::tag::divides,
8113
field_component<T,M> const &,
8116
operator/ (field_component<T,M> const &left, T const &right)
8118
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T,M> const &, T const &>()(left, right);
8120
#endif // BOOST_VERSION
8121
template<class T, class M>
8122
#if BOOST_VERSION < 104601
8124
boost::proto::detail::enable_binary<
8126
is_field<field_component_const<T,M> >,
8127
field_component_const<T,M>,
8130
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8131
::impl<const field_component_const<T,M>&, const int&>::result_type const
8133
operator/ (const field_component_const<T,M>& l, const int& r)
8135
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8136
::impl<const field_component_const<T,M>&, const int&>() (l, r);
8138
#else // BOOST_VERSION >= 104601
8139
typename boost::proto::detail::enable_binary<
8141
field_domain::proto_grammar,
8143
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
8146
boost::proto::is_extension<field_component_const<T,M> >,
8147
boost::proto::is_extension<int >
8151
boost::proto::tag::divides,
8152
field_component_const<T,M> const &,
8155
operator/ (field_component_const<T,M> const &left, int const &right)
8157
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T,M> const &, int const &>()(left, right);
8159
#endif // BOOST_VERSION
8160
template<class T, class M>
8161
#if BOOST_VERSION < 104601
8163
boost::proto::detail::enable_binary<
8165
is_field<field_component_const<T,M> >,
8166
field_component_const<T,M>,
8169
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8170
::impl<const field_component_const<T,M>&, const T&>::result_type const
8172
operator/ (const field_component_const<T,M>& l, const T& r)
8174
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8175
::impl<const field_component_const<T,M>&, const T&>() (l, r);
8177
#else // BOOST_VERSION >= 104601
8178
typename boost::proto::detail::enable_binary<
8180
field_domain::proto_grammar,
8182
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
8185
boost::proto::is_extension<field_component_const<T,M> >,
8186
boost::proto::is_extension<T >
8190
boost::proto::tag::divides,
8191
field_component_const<T,M> const &,
8194
operator/ (field_component_const<T,M> const &left, T const &right)
8196
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T,M> const &, T const &>()(left, right);
8198
#endif // BOOST_VERSION
1870
8199
template<class T1, class T2, class M>
8200
#if BOOST_VERSION < 104601
1872
8202
boost::proto::detail::enable_binary<
1913
8289
operator/ (const field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
1915
8291
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
1916
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1918
template<class T1, class T2, class M>
8292
::impl<const field_basic<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
8294
#else // BOOST_VERSION >= 104601
8295
typename boost::proto::detail::enable_binary<
8297
field_domain::proto_grammar,
8299
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
8302
boost::proto::is_extension<field_basic<T1,M> >,
8303
boost::proto::is_extension<field_indirect_const<T2,M> >
8307
boost::proto::tag::divides,
8308
field_basic<T1,M> const &,
8309
field_indirect_const<T2,M> const &
8311
operator/ (field_basic<T1,M> const &left, field_indirect_const<T2,M> const &right)
8313
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_basic<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
8315
#endif // BOOST_VERSION
8316
template<class T1, class T2, class M>
8317
#if BOOST_VERSION < 104601
8319
boost::proto::detail::enable_binary<
8321
is_field<field_basic<T1,M> >,
8323
is_field<field_component<T2,M> >,
8324
field_component<T2,M>,
8325
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8326
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>::result_type const
8328
operator/ (const field_basic<T1,M>& l, const field_component<T2,M>& r)
8330
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8331
::impl<const field_basic<T1,M>&, const field_component<T2,M>&>() (l, r);
8333
#else // BOOST_VERSION >= 104601
8334
typename boost::proto::detail::enable_binary<
8336
field_domain::proto_grammar,
8338
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
8341
boost::proto::is_extension<field_basic<T1,M> >,
8342
boost::proto::is_extension<field_component<T2,M> >
8346
boost::proto::tag::divides,
8347
field_basic<T1,M> const &,
8348
field_component<T2,M> const &
8350
operator/ (field_basic<T1,M> const &left, field_component<T2,M> const &right)
8352
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_basic<T1,M> const &, field_component<T2,M> const &>()(left, right);
8354
#endif // BOOST_VERSION
8355
template<class T1, class T2, class M>
8356
#if BOOST_VERSION < 104601
8358
boost::proto::detail::enable_binary<
8360
is_field<field_basic<T1,M> >,
8362
is_field<field_component_const<T2,M> >,
8363
field_component_const<T2,M>,
8364
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8365
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>::result_type const
8367
operator/ (const field_basic<T1,M>& l, const field_component_const<T2,M>& r)
8369
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8370
::impl<const field_basic<T1,M>&, const field_component_const<T2,M>&>() (l, r);
8372
#else // BOOST_VERSION >= 104601
8373
typename boost::proto::detail::enable_binary<
8375
field_domain::proto_grammar,
8377
boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
8380
boost::proto::is_extension<field_basic<T1,M> >,
8381
boost::proto::is_extension<field_component_const<T2,M> >
8385
boost::proto::tag::divides,
8386
field_basic<T1,M> const &,
8387
field_component_const<T2,M> const &
8389
operator/ (field_basic<T1,M> const &left, field_component_const<T2,M> const &right)
8391
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_basic<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
8393
#endif // BOOST_VERSION
8394
template<class T1, class T2, class M>
8395
#if BOOST_VERSION < 104601
1920
8397
boost::proto::detail::enable_binary<
1961
8484
operator/ (const field_indirect<T1,M>& l, const field_indirect_const<T2,M>& r)
1963
8486
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
1964
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
1966
template<class T1, class T2, class M>
8487
::impl<const field_indirect<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
8489
#else // BOOST_VERSION >= 104601
8490
typename boost::proto::detail::enable_binary<
8492
field_domain::proto_grammar,
8494
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
8497
boost::proto::is_extension<field_indirect<T1,M> >,
8498
boost::proto::is_extension<field_indirect_const<T2,M> >
8502
boost::proto::tag::divides,
8503
field_indirect<T1,M> const &,
8504
field_indirect_const<T2,M> const &
8506
operator/ (field_indirect<T1,M> const &left, field_indirect_const<T2,M> const &right)
8508
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
8510
#endif // BOOST_VERSION
8511
template<class T1, class T2, class M>
8512
#if BOOST_VERSION < 104601
8514
boost::proto::detail::enable_binary<
8516
is_field<field_indirect<T1,M> >,
8517
field_indirect<T1,M>,
8518
is_field<field_component<T2,M> >,
8519
field_component<T2,M>,
8520
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8521
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>::result_type const
8523
operator/ (const field_indirect<T1,M>& l, const field_component<T2,M>& r)
8525
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8526
::impl<const field_indirect<T1,M>&, const field_component<T2,M>&>() (l, r);
8528
#else // BOOST_VERSION >= 104601
8529
typename boost::proto::detail::enable_binary<
8531
field_domain::proto_grammar,
8533
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
8536
boost::proto::is_extension<field_indirect<T1,M> >,
8537
boost::proto::is_extension<field_component<T2,M> >
8541
boost::proto::tag::divides,
8542
field_indirect<T1,M> const &,
8543
field_component<T2,M> const &
8545
operator/ (field_indirect<T1,M> const &left, field_component<T2,M> const &right)
8547
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect<T1,M> const &, field_component<T2,M> const &>()(left, right);
8549
#endif // BOOST_VERSION
8550
template<class T1, class T2, class M>
8551
#if BOOST_VERSION < 104601
8553
boost::proto::detail::enable_binary<
8555
is_field<field_indirect<T1,M> >,
8556
field_indirect<T1,M>,
8557
is_field<field_component_const<T2,M> >,
8558
field_component_const<T2,M>,
8559
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8560
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>::result_type const
8562
operator/ (const field_indirect<T1,M>& l, const field_component_const<T2,M>& r)
8564
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8565
::impl<const field_indirect<T1,M>&, const field_component_const<T2,M>&>() (l, r);
8567
#else // BOOST_VERSION >= 104601
8568
typename boost::proto::detail::enable_binary<
8570
field_domain::proto_grammar,
8572
boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
8575
boost::proto::is_extension<field_indirect<T1,M> >,
8576
boost::proto::is_extension<field_component_const<T2,M> >
8580
boost::proto::tag::divides,
8581
field_indirect<T1,M> const &,
8582
field_component_const<T2,M> const &
8584
operator/ (field_indirect<T1,M> const &left, field_component_const<T2,M> const &right)
8586
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
8588
#endif // BOOST_VERSION
8589
template<class T1, class T2, class M>
8590
#if BOOST_VERSION < 104601
1968
8592
boost::proto::detail::enable_binary<
2009
8679
operator/ (const field_indirect_const<T1,M>& l, const field_indirect_const<T2,M>& r)
2011
8681
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
2012
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
8682
::impl<const field_indirect_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
8684
#else // BOOST_VERSION >= 104601
8685
typename boost::proto::detail::enable_binary<
8687
field_domain::proto_grammar,
8689
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
8692
boost::proto::is_extension<field_indirect_const<T1,M> >,
8693
boost::proto::is_extension<field_indirect_const<T2,M> >
8697
boost::proto::tag::divides,
8698
field_indirect_const<T1,M> const &,
8699
field_indirect_const<T2,M> const &
8701
operator/ (field_indirect_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
8703
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
8705
#endif // BOOST_VERSION
8706
template<class T1, class T2, class M>
8707
#if BOOST_VERSION < 104601
8709
boost::proto::detail::enable_binary<
8711
is_field<field_indirect_const<T1,M> >,
8712
field_indirect_const<T1,M>,
8713
is_field<field_component<T2,M> >,
8714
field_component<T2,M>,
8715
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8716
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>::result_type const
8718
operator/ (const field_indirect_const<T1,M>& l, const field_component<T2,M>& r)
8720
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8721
::impl<const field_indirect_const<T1,M>&, const field_component<T2,M>&>() (l, r);
8723
#else // BOOST_VERSION >= 104601
8724
typename boost::proto::detail::enable_binary<
8726
field_domain::proto_grammar,
8728
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
8731
boost::proto::is_extension<field_indirect_const<T1,M> >,
8732
boost::proto::is_extension<field_component<T2,M> >
8736
boost::proto::tag::divides,
8737
field_indirect_const<T1,M> const &,
8738
field_component<T2,M> const &
8740
operator/ (field_indirect_const<T1,M> const &left, field_component<T2,M> const &right)
8742
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
8744
#endif // BOOST_VERSION
8745
template<class T1, class T2, class M>
8746
#if BOOST_VERSION < 104601
8748
boost::proto::detail::enable_binary<
8750
is_field<field_indirect_const<T1,M> >,
8751
field_indirect_const<T1,M>,
8752
is_field<field_component_const<T2,M> >,
8753
field_component_const<T2,M>,
8754
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8755
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
8757
operator/ (const field_indirect_const<T1,M>& l, const field_component_const<T2,M>& r)
8759
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8760
::impl<const field_indirect_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
8762
#else // BOOST_VERSION >= 104601
8763
typename boost::proto::detail::enable_binary<
8765
field_domain::proto_grammar,
8767
boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
8770
boost::proto::is_extension<field_indirect_const<T1,M> >,
8771
boost::proto::is_extension<field_component_const<T2,M> >
8775
boost::proto::tag::divides,
8776
field_indirect_const<T1,M> const &,
8777
field_component_const<T2,M> const &
8779
operator/ (field_indirect_const<T1,M> const &left, field_component_const<T2,M> const &right)
8781
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
8783
#endif // BOOST_VERSION
8784
template<class T1, class T2, class M>
8785
#if BOOST_VERSION < 104601
8787
boost::proto::detail::enable_binary<
8789
is_field<field_component<T1,M> >,
8790
field_component<T1,M>,
8791
is_field<field_basic<T2,M> >,
8793
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8794
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>::result_type const
8796
operator/ (const field_component<T1,M>& l, const field_basic<T2,M>& r)
8798
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8799
::impl<const field_component<T1,M>&, const field_basic<T2,M>&>() (l, r);
8801
#else // BOOST_VERSION >= 104601
8802
typename boost::proto::detail::enable_binary<
8804
field_domain::proto_grammar,
8806
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
8809
boost::proto::is_extension<field_component<T1,M> >,
8810
boost::proto::is_extension<field_basic<T2,M> >
8814
boost::proto::tag::divides,
8815
field_component<T1,M> const &,
8816
field_basic<T2,M> const &
8818
operator/ (field_component<T1,M> const &left, field_basic<T2,M> const &right)
8820
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T1,M> const &, field_basic<T2,M> const &>()(left, right);
8822
#endif // BOOST_VERSION
8823
template<class T1, class T2, class M>
8824
#if BOOST_VERSION < 104601
8826
boost::proto::detail::enable_binary<
8828
is_field<field_component<T1,M> >,
8829
field_component<T1,M>,
8830
is_field<field_indirect<T2,M> >,
8831
field_indirect<T2,M>,
8832
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8833
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>::result_type const
8835
operator/ (const field_component<T1,M>& l, const field_indirect<T2,M>& r)
8837
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8838
::impl<const field_component<T1,M>&, const field_indirect<T2,M>&>() (l, r);
8840
#else // BOOST_VERSION >= 104601
8841
typename boost::proto::detail::enable_binary<
8843
field_domain::proto_grammar,
8845
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
8848
boost::proto::is_extension<field_component<T1,M> >,
8849
boost::proto::is_extension<field_indirect<T2,M> >
8853
boost::proto::tag::divides,
8854
field_component<T1,M> const &,
8855
field_indirect<T2,M> const &
8857
operator/ (field_component<T1,M> const &left, field_indirect<T2,M> const &right)
8859
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
8861
#endif // BOOST_VERSION
8862
template<class T1, class T2, class M>
8863
#if BOOST_VERSION < 104601
8865
boost::proto::detail::enable_binary<
8867
is_field<field_component<T1,M> >,
8868
field_component<T1,M>,
8869
is_field<field_indirect_const<T2,M> >,
8870
field_indirect_const<T2,M>,
8871
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8872
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
8874
operator/ (const field_component<T1,M>& l, const field_indirect_const<T2,M>& r)
8876
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8877
::impl<const field_component<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
8879
#else // BOOST_VERSION >= 104601
8880
typename boost::proto::detail::enable_binary<
8882
field_domain::proto_grammar,
8884
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
8887
boost::proto::is_extension<field_component<T1,M> >,
8888
boost::proto::is_extension<field_indirect_const<T2,M> >
8892
boost::proto::tag::divides,
8893
field_component<T1,M> const &,
8894
field_indirect_const<T2,M> const &
8896
operator/ (field_component<T1,M> const &left, field_indirect_const<T2,M> const &right)
8898
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
8900
#endif // BOOST_VERSION
8901
template<class T1, class T2, class M>
8902
#if BOOST_VERSION < 104601
8904
boost::proto::detail::enable_binary<
8906
is_field<field_component<T1,M> >,
8907
field_component<T1,M>,
8908
is_field<field_component<T2,M> >,
8909
field_component<T2,M>,
8910
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8911
::impl<const field_component<T1,M>&, const field_component<T2,M>&>::result_type const
8913
operator/ (const field_component<T1,M>& l, const field_component<T2,M>& r)
8915
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8916
::impl<const field_component<T1,M>&, const field_component<T2,M>&>() (l, r);
8918
#else // BOOST_VERSION >= 104601
8919
typename boost::proto::detail::enable_binary<
8921
field_domain::proto_grammar,
8923
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
8926
boost::proto::is_extension<field_component<T1,M> >,
8927
boost::proto::is_extension<field_component<T2,M> >
8931
boost::proto::tag::divides,
8932
field_component<T1,M> const &,
8933
field_component<T2,M> const &
8935
operator/ (field_component<T1,M> const &left, field_component<T2,M> const &right)
8937
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T1,M> const &, field_component<T2,M> const &>()(left, right);
8939
#endif // BOOST_VERSION
8940
template<class T1, class T2, class M>
8941
#if BOOST_VERSION < 104601
8943
boost::proto::detail::enable_binary<
8945
is_field<field_component<T1,M> >,
8946
field_component<T1,M>,
8947
is_field<field_component_const<T2,M> >,
8948
field_component_const<T2,M>,
8949
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8950
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>::result_type const
8952
operator/ (const field_component<T1,M>& l, const field_component_const<T2,M>& r)
8954
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8955
::impl<const field_component<T1,M>&, const field_component_const<T2,M>&>() (l, r);
8957
#else // BOOST_VERSION >= 104601
8958
typename boost::proto::detail::enable_binary<
8960
field_domain::proto_grammar,
8962
boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
8965
boost::proto::is_extension<field_component<T1,M> >,
8966
boost::proto::is_extension<field_component_const<T2,M> >
8970
boost::proto::tag::divides,
8971
field_component<T1,M> const &,
8972
field_component_const<T2,M> const &
8974
operator/ (field_component<T1,M> const &left, field_component_const<T2,M> const &right)
8976
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
8978
#endif // BOOST_VERSION
8979
template<class T1, class T2, class M>
8980
#if BOOST_VERSION < 104601
8982
boost::proto::detail::enable_binary<
8984
is_field<field_component_const<T1,M> >,
8985
field_component_const<T1,M>,
8986
is_field<field_basic<T2,M> >,
8988
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8989
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>::result_type const
8991
operator/ (const field_component_const<T1,M>& l, const field_basic<T2,M>& r)
8993
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
8994
::impl<const field_component_const<T1,M>&, const field_basic<T2,M>&>() (l, r);
8996
#else // BOOST_VERSION >= 104601
8997
typename boost::proto::detail::enable_binary<
8999
field_domain::proto_grammar,
9001
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
9004
boost::proto::is_extension<field_component_const<T1,M> >,
9005
boost::proto::is_extension<field_basic<T2,M> >
9009
boost::proto::tag::divides,
9010
field_component_const<T1,M> const &,
9011
field_basic<T2,M> const &
9013
operator/ (field_component_const<T1,M> const &left, field_basic<T2,M> const &right)
9015
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T1,M> const &, field_basic<T2,M> const &>()(left, right);
9017
#endif // BOOST_VERSION
9018
template<class T1, class T2, class M>
9019
#if BOOST_VERSION < 104601
9021
boost::proto::detail::enable_binary<
9023
is_field<field_component_const<T1,M> >,
9024
field_component_const<T1,M>,
9025
is_field<field_indirect<T2,M> >,
9026
field_indirect<T2,M>,
9027
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9028
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>::result_type const
9030
operator/ (const field_component_const<T1,M>& l, const field_indirect<T2,M>& r)
9032
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9033
::impl<const field_component_const<T1,M>&, const field_indirect<T2,M>&>() (l, r);
9035
#else // BOOST_VERSION >= 104601
9036
typename boost::proto::detail::enable_binary<
9038
field_domain::proto_grammar,
9040
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
9043
boost::proto::is_extension<field_component_const<T1,M> >,
9044
boost::proto::is_extension<field_indirect<T2,M> >
9048
boost::proto::tag::divides,
9049
field_component_const<T1,M> const &,
9050
field_indirect<T2,M> const &
9052
operator/ (field_component_const<T1,M> const &left, field_indirect<T2,M> const &right)
9054
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T1,M> const &, field_indirect<T2,M> const &>()(left, right);
9056
#endif // BOOST_VERSION
9057
template<class T1, class T2, class M>
9058
#if BOOST_VERSION < 104601
9060
boost::proto::detail::enable_binary<
9062
is_field<field_component_const<T1,M> >,
9063
field_component_const<T1,M>,
9064
is_field<field_indirect_const<T2,M> >,
9065
field_indirect_const<T2,M>,
9066
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9067
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>::result_type const
9069
operator/ (const field_component_const<T1,M>& l, const field_indirect_const<T2,M>& r)
9071
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9072
::impl<const field_component_const<T1,M>&, const field_indirect_const<T2,M>&>() (l, r);
9074
#else // BOOST_VERSION >= 104601
9075
typename boost::proto::detail::enable_binary<
9077
field_domain::proto_grammar,
9079
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
9082
boost::proto::is_extension<field_component_const<T1,M> >,
9083
boost::proto::is_extension<field_indirect_const<T2,M> >
9087
boost::proto::tag::divides,
9088
field_component_const<T1,M> const &,
9089
field_indirect_const<T2,M> const &
9091
operator/ (field_component_const<T1,M> const &left, field_indirect_const<T2,M> const &right)
9093
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T1,M> const &, field_indirect_const<T2,M> const &>()(left, right);
9095
#endif // BOOST_VERSION
9096
template<class T1, class T2, class M>
9097
#if BOOST_VERSION < 104601
9099
boost::proto::detail::enable_binary<
9101
is_field<field_component_const<T1,M> >,
9102
field_component_const<T1,M>,
9103
is_field<field_component<T2,M> >,
9104
field_component<T2,M>,
9105
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9106
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>::result_type const
9108
operator/ (const field_component_const<T1,M>& l, const field_component<T2,M>& r)
9110
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9111
::impl<const field_component_const<T1,M>&, const field_component<T2,M>&>() (l, r);
9113
#else // BOOST_VERSION >= 104601
9114
typename boost::proto::detail::enable_binary<
9116
field_domain::proto_grammar,
9118
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
9121
boost::proto::is_extension<field_component_const<T1,M> >,
9122
boost::proto::is_extension<field_component<T2,M> >
9126
boost::proto::tag::divides,
9127
field_component_const<T1,M> const &,
9128
field_component<T2,M> const &
9130
operator/ (field_component_const<T1,M> const &left, field_component<T2,M> const &right)
9132
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T1,M> const &, field_component<T2,M> const &>()(left, right);
9134
#endif // BOOST_VERSION
9135
template<class T1, class T2, class M>
9136
#if BOOST_VERSION < 104601
9138
boost::proto::detail::enable_binary<
9140
is_field<field_component_const<T1,M> >,
9141
field_component_const<T1,M>,
9142
is_field<field_component_const<T2,M> >,
9143
field_component_const<T2,M>,
9144
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9145
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>::result_type const
9147
operator/ (const field_component_const<T1,M>& l, const field_component_const<T2,M>& r)
9149
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9150
::impl<const field_component_const<T1,M>&, const field_component_const<T2,M>&>() (l, r);
9152
#else // BOOST_VERSION >= 104601
9153
typename boost::proto::detail::enable_binary<
9155
field_domain::proto_grammar,
9157
boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
9160
boost::proto::is_extension<field_component_const<T1,M> >,
9161
boost::proto::is_extension<field_component_const<T2,M> >
9165
boost::proto::tag::divides,
9166
field_component_const<T1,M> const &,
9167
field_component_const<T2,M> const &
9169
operator/ (field_component_const<T1,M> const &left, field_component_const<T2,M> const &right)
9171
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T1,M> const &, field_component_const<T2,M> const &>()(left, right);
9173
#endif // BOOST_VERSION
2014
9174
template<class Expr>
9175
#if BOOST_VERSION < 104601
2016
9177
boost::proto::detail::enable_binary<
2169
9537
operator/ (const field_expr<Expr>& l, const field_indirect_const<T,M>& r)
2171
9539
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
2172
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
9540
::impl<const field_expr<Expr>&, const field_indirect_const<T,M>&>() (l, r);
9542
#else // BOOST_VERSION >= 104601
9543
typename boost::proto::detail::enable_binary<
9545
field_domain::proto_grammar,
9547
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
9550
boost::proto::is_extension<field_expr<Expr> >,
9551
boost::proto::is_extension<field_indirect_const<T,M> >
9555
boost::proto::tag::divides,
9556
field_expr<Expr> const &,
9557
field_indirect_const<T,M> const &
9559
operator/ (field_expr<Expr> const &left, field_indirect_const<T,M> const &right)
9561
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_expr<Expr> const &, field_indirect_const<T,M> const &>()(left, right);
9563
#endif // BOOST_VERSION
9564
template<class T, class M, class Expr>
9565
#if BOOST_VERSION < 104601
9567
boost::proto::detail::enable_binary<
9569
is_field<field_component<T,M> >,
9570
field_component<T,M>,
9571
is_field<field_expr<Expr> >,
9573
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9574
::impl<const field_component<T,M>&, const field_expr<Expr>&>::result_type const
9576
operator/ (const field_component<T,M>& l, const field_expr<Expr>& r)
9578
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9579
::impl<const field_component<T,M>&, const field_expr<Expr>&>() (l, r);
9581
#else // BOOST_VERSION >= 104601
9582
typename boost::proto::detail::enable_binary<
9584
field_domain::proto_grammar,
9586
boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
9589
boost::proto::is_extension<field_component<T,M> >,
9590
boost::proto::is_extension<field_expr<Expr> >
9594
boost::proto::tag::divides,
9595
field_component<T,M> const &,
9596
field_expr<Expr> const &
9598
operator/ (field_component<T,M> const &left, field_expr<Expr> const &right)
9600
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T,M> const &, field_expr<Expr> const &>()(left, right);
9602
#endif // BOOST_VERSION
9603
template<class T, class M, class Expr>
9604
#if BOOST_VERSION < 104601
9606
boost::proto::detail::enable_binary<
9608
is_field<field_expr<Expr> >,
9610
is_field<field_component<T,M> >,
9611
field_component<T,M>,
9612
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9613
::impl<const field_expr<Expr>&, const field_component<T,M>&>::result_type const
9615
operator/ (const field_expr<Expr>& l, const field_component<T,M>& r)
9617
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9618
::impl<const field_expr<Expr>&, const field_component<T,M>&>() (l, r);
9620
#else // BOOST_VERSION >= 104601
9621
typename boost::proto::detail::enable_binary<
9623
field_domain::proto_grammar,
9625
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
9628
boost::proto::is_extension<field_expr<Expr> >,
9629
boost::proto::is_extension<field_component<T,M> >
9633
boost::proto::tag::divides,
9634
field_expr<Expr> const &,
9635
field_component<T,M> const &
9637
operator/ (field_expr<Expr> const &left, field_component<T,M> const &right)
9639
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_expr<Expr> const &, field_component<T,M> const &>()(left, right);
9641
#endif // BOOST_VERSION
9642
template<class T, class M, class Expr>
9643
#if BOOST_VERSION < 104601
9645
boost::proto::detail::enable_binary<
9647
is_field<field_component_const<T,M> >,
9648
field_component_const<T,M>,
9649
is_field<field_expr<Expr> >,
9651
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9652
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>::result_type const
9654
operator/ (const field_component_const<T,M>& l, const field_expr<Expr>& r)
9656
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9657
::impl<const field_component_const<T,M>&, const field_expr<Expr>&>() (l, r);
9659
#else // BOOST_VERSION >= 104601
9660
typename boost::proto::detail::enable_binary<
9662
field_domain::proto_grammar,
9664
boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
9667
boost::proto::is_extension<field_component_const<T,M> >,
9668
boost::proto::is_extension<field_expr<Expr> >
9672
boost::proto::tag::divides,
9673
field_component_const<T,M> const &,
9674
field_expr<Expr> const &
9676
operator/ (field_component_const<T,M> const &left, field_expr<Expr> const &right)
9678
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component_const<T,M> const &, field_expr<Expr> const &>()(left, right);
9680
#endif // BOOST_VERSION
9681
template<class T, class M, class Expr>
9682
#if BOOST_VERSION < 104601
9684
boost::proto::detail::enable_binary<
9686
is_field<field_expr<Expr> >,
9688
is_field<field_component_const<T,M> >,
9689
field_component_const<T,M>,
9690
typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9691
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>::result_type const
9693
operator/ (const field_expr<Expr>& l, const field_component_const<T,M>& r)
9695
return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
9696
::impl<const field_expr<Expr>&, const field_component_const<T,M>&>() (l, r);
9698
#else // BOOST_VERSION >= 104601
9699
typename boost::proto::detail::enable_binary<
9701
field_domain::proto_grammar,
9703
boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
9706
boost::proto::is_extension<field_expr<Expr> >,
9707
boost::proto::is_extension<field_component_const<T,M> >
9711
boost::proto::tag::divides,
9712
field_expr<Expr> const &,
9713
field_component_const<T,M> const &
9715
operator/ (field_expr<Expr> const &left, field_component_const<T,M> const &right)
9717
return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_expr<Expr> const &, field_component_const<T,M> const &>()(left, right);
9719
#endif // BOOST_VERSION
2174
9720
template<class Expr1, class Expr2>
9721
#if BOOST_VERSION < 104601
2176
9723
boost::proto::detail::enable_binary<
2197
9766
field_basic<T,M>&
2198
9767
operator+= (field_basic<T,M>& l, const int& r)
2200
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9769
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2203
9772
template<class T1, class T2, class M>
2204
9773
field_basic<T1,M>&
2205
9774
operator+= (field_basic<T1,M>& l, const T2& r)
2207
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9776
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2210
9779
template<class T1, class T2, class M>
2211
9780
field_basic<T1,M>&
2212
9781
operator+= (field_basic<T1,M>& l, const field_basic<T2,M>& r)
2214
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2215
<< " and " << r.get_stamp() << " in field += expression");
2216
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9783
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9784
<< " and " << r.stamp() << " in field += expression");
9785
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2219
9788
template<class T1, class T2, class M>
2220
9789
field_basic<T1,M>&
2221
9790
operator+= (field_basic<T1,M>& l, const field_indirect<T2,M>& r)
2223
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2224
<< " and " << r.get_stamp() << " in field += expression");
2225
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9792
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9793
<< " and " << r.stamp() << " in field += expression");
9794
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2228
9797
template<class T1, class T2, class M>
2229
9798
field_basic<T1,M>&
2230
9799
operator+= (field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
2232
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2233
<< " and " << r.get_stamp() << " in field += expression");
2234
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9801
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9802
<< " and " << r.stamp() << " in field += expression");
9803
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9806
template<class T1, class T2, class M>
9808
operator+= (field_basic<T1,M>& l, const field_component<T2,M>& r)
9810
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9811
<< " and " << r.stamp() << " in field += expression");
9812
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9815
template<class T1, class T2, class M>
9817
operator+= (field_basic<T1,M>& l, const field_component_const<T2,M>& r)
9819
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9820
<< " and " << r.stamp() << " in field += expression");
9821
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2237
9824
template<class T, class M, class Expr>
2238
9825
field_basic<T,M>&
2239
9826
operator+= (field_basic<T,M>& l, const field_expr<Expr>& r)
2241
const field_check_stamp_context check_stamp (l.get_stamp());
9828
const field_check_stamp_context check_stamp (l.stamp());
2242
9829
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2243
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9830
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2246
9833
template<class T, class M>
2247
9834
field_indirect<T,M>
2248
9835
operator+= (field_indirect<T,M> l, const int& r)
2250
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9837
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2253
9840
template<class T1, class T2, class M>
2254
9841
field_indirect<T1,M>
2255
9842
operator+= (field_indirect<T1,M> l, const T2& r)
2257
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9844
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2260
9847
template<class T1, class T2, class M>
2261
9848
field_indirect<T1,M>
2262
9849
operator+= (field_indirect<T1,M> l, const field_basic<T2,M>& r)
2264
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2265
<< " and " << r.get_stamp() << " in field += expression");
2266
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9851
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9852
<< " and " << r.stamp() << " in field += expression");
9853
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2269
9856
template<class T1, class T2, class M>
2270
9857
field_indirect<T1,M>
2271
9858
operator+= (field_indirect<T1,M> l, const field_indirect<T2,M>& r)
2273
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2274
<< " and " << r.get_stamp() << " in field += expression");
2275
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9860
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9861
<< " and " << r.stamp() << " in field += expression");
9862
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2278
9865
template<class T1, class T2, class M>
2279
9866
field_indirect<T1,M>
2280
9867
operator+= (field_indirect<T1,M> l, const field_indirect_const<T2,M>& r)
2282
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2283
<< " and " << r.get_stamp() << " in field += expression");
2284
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9869
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9870
<< " and " << r.stamp() << " in field += expression");
9871
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9874
template<class T1, class T2, class M>
9875
field_indirect<T1,M>
9876
operator+= (field_indirect<T1,M> l, const field_component<T2,M>& r)
9878
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9879
<< " and " << r.stamp() << " in field += expression");
9880
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9883
template<class T1, class T2, class M>
9884
field_indirect<T1,M>
9885
operator+= (field_indirect<T1,M> l, const field_component_const<T2,M>& r)
9887
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9888
<< " and " << r.stamp() << " in field += expression");
9889
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2287
9892
template<class T, class M, class Expr>
2288
9893
field_indirect<T,M>
2289
9894
operator+= (field_indirect<T,M> l, const field_expr<Expr>& r)
2291
const field_check_stamp_context check_stamp (l.get_stamp());
2292
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2293
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9896
const field_check_stamp_context check_stamp (l.stamp());
9897
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
9898
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9901
template<class T, class M>
9902
field_component<T,M>
9903
operator+= (field_component<T,M> l, const int& r)
9905
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9908
template<class T1, class T2, class M>
9909
field_component<T1,M>
9910
operator+= (field_component<T1,M> l, const T2& r)
9912
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9915
template<class T1, class T2, class M>
9916
field_component<T1,M>
9917
operator+= (field_component<T1,M> l, const field_basic<T2,M>& r)
9919
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9920
<< " and " << r.stamp() << " in field += expression");
9921
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9924
template<class T1, class T2, class M>
9925
field_component<T1,M>
9926
operator+= (field_component<T1,M> l, const field_indirect<T2,M>& r)
9928
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9929
<< " and " << r.stamp() << " in field += expression");
9930
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9933
template<class T1, class T2, class M>
9934
field_component<T1,M>
9935
operator+= (field_component<T1,M> l, const field_indirect_const<T2,M>& r)
9937
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9938
<< " and " << r.stamp() << " in field += expression");
9939
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9942
template<class T1, class T2, class M>
9943
field_component<T1,M>
9944
operator+= (field_component<T1,M> l, const field_component<T2,M>& r)
9946
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9947
<< " and " << r.stamp() << " in field += expression");
9948
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9951
template<class T1, class T2, class M>
9952
field_component<T1,M>
9953
operator+= (field_component<T1,M> l, const field_component_const<T2,M>& r)
9955
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9956
<< " and " << r.stamp() << " in field += expression");
9957
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
9960
template<class T, class M, class Expr>
9961
field_component<T,M>
9962
operator+= (field_component<T,M> l, const field_expr<Expr>& r)
9964
const field_check_stamp_context check_stamp (l.stamp());
9965
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
9966
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::plus_assign());
2296
9969
namespace field_detail {
2303
9976
field_basic<T,M>&
2304
9977
operator-= (field_basic<T,M>& l, const int& r)
2306
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
9979
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2309
9982
template<class T1, class T2, class M>
2310
9983
field_basic<T1,M>&
2311
9984
operator-= (field_basic<T1,M>& l, const T2& r)
2313
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
9986
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2316
9989
template<class T1, class T2, class M>
2317
9990
field_basic<T1,M>&
2318
9991
operator-= (field_basic<T1,M>& l, const field_basic<T2,M>& r)
2320
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2321
<< " and " << r.get_stamp() << " in field -= expression");
2322
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
9993
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
9994
<< " and " << r.stamp() << " in field -= expression");
9995
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2325
9998
template<class T1, class T2, class M>
2326
9999
field_basic<T1,M>&
2327
10000
operator-= (field_basic<T1,M>& l, const field_indirect<T2,M>& r)
2329
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2330
<< " and " << r.get_stamp() << " in field -= expression");
2331
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10002
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10003
<< " and " << r.stamp() << " in field -= expression");
10004
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2334
10007
template<class T1, class T2, class M>
2335
10008
field_basic<T1,M>&
2336
10009
operator-= (field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
2338
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2339
<< " and " << r.get_stamp() << " in field -= expression");
2340
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10011
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10012
<< " and " << r.stamp() << " in field -= expression");
10013
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10016
template<class T1, class T2, class M>
10018
operator-= (field_basic<T1,M>& l, const field_component<T2,M>& r)
10020
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10021
<< " and " << r.stamp() << " in field -= expression");
10022
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10025
template<class T1, class T2, class M>
10027
operator-= (field_basic<T1,M>& l, const field_component_const<T2,M>& r)
10029
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10030
<< " and " << r.stamp() << " in field -= expression");
10031
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2343
10034
template<class T, class M, class Expr>
2344
10035
field_basic<T,M>&
2345
10036
operator-= (field_basic<T,M>& l, const field_expr<Expr>& r)
2347
const field_check_stamp_context check_stamp (l.get_stamp());
10038
const field_check_stamp_context check_stamp (l.stamp());
2348
10039
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2349
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10040
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2352
10043
template<class T, class M>
2353
10044
field_indirect<T,M>
2354
10045
operator-= (field_indirect<T,M> l, const int& r)
2356
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10047
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2359
10050
template<class T1, class T2, class M>
2360
10051
field_indirect<T1,M>
2361
10052
operator-= (field_indirect<T1,M> l, const T2& r)
2363
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10054
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2366
10057
template<class T1, class T2, class M>
2367
10058
field_indirect<T1,M>
2368
10059
operator-= (field_indirect<T1,M> l, const field_basic<T2,M>& r)
2370
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2371
<< " and " << r.get_stamp() << " in field -= expression");
2372
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10061
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10062
<< " and " << r.stamp() << " in field -= expression");
10063
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2375
10066
template<class T1, class T2, class M>
2376
10067
field_indirect<T1,M>
2377
10068
operator-= (field_indirect<T1,M> l, const field_indirect<T2,M>& r)
2379
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2380
<< " and " << r.get_stamp() << " in field -= expression");
2381
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10070
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10071
<< " and " << r.stamp() << " in field -= expression");
10072
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2384
10075
template<class T1, class T2, class M>
2385
10076
field_indirect<T1,M>
2386
10077
operator-= (field_indirect<T1,M> l, const field_indirect_const<T2,M>& r)
2388
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2389
<< " and " << r.get_stamp() << " in field -= expression");
2390
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10079
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10080
<< " and " << r.stamp() << " in field -= expression");
10081
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10084
template<class T1, class T2, class M>
10085
field_indirect<T1,M>
10086
operator-= (field_indirect<T1,M> l, const field_component<T2,M>& r)
10088
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10089
<< " and " << r.stamp() << " in field -= expression");
10090
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10093
template<class T1, class T2, class M>
10094
field_indirect<T1,M>
10095
operator-= (field_indirect<T1,M> l, const field_component_const<T2,M>& r)
10097
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10098
<< " and " << r.stamp() << " in field -= expression");
10099
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2393
10102
template<class T, class M, class Expr>
2394
10103
field_indirect<T,M>
2395
10104
operator-= (field_indirect<T,M> l, const field_expr<Expr>& r)
2397
const field_check_stamp_context check_stamp (l.get_stamp());
2398
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2399
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10106
const field_check_stamp_context check_stamp (l.stamp());
10107
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10108
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10111
template<class T, class M>
10112
field_component<T,M>
10113
operator-= (field_component<T,M> l, const int& r)
10115
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10118
template<class T1, class T2, class M>
10119
field_component<T1,M>
10120
operator-= (field_component<T1,M> l, const T2& r)
10122
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10125
template<class T1, class T2, class M>
10126
field_component<T1,M>
10127
operator-= (field_component<T1,M> l, const field_basic<T2,M>& r)
10129
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10130
<< " and " << r.stamp() << " in field -= expression");
10131
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10134
template<class T1, class T2, class M>
10135
field_component<T1,M>
10136
operator-= (field_component<T1,M> l, const field_indirect<T2,M>& r)
10138
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10139
<< " and " << r.stamp() << " in field -= expression");
10140
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10143
template<class T1, class T2, class M>
10144
field_component<T1,M>
10145
operator-= (field_component<T1,M> l, const field_indirect_const<T2,M>& r)
10147
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10148
<< " and " << r.stamp() << " in field -= expression");
10149
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10152
template<class T1, class T2, class M>
10153
field_component<T1,M>
10154
operator-= (field_component<T1,M> l, const field_component<T2,M>& r)
10156
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10157
<< " and " << r.stamp() << " in field -= expression");
10158
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10161
template<class T1, class T2, class M>
10162
field_component<T1,M>
10163
operator-= (field_component<T1,M> l, const field_component_const<T2,M>& r)
10165
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10166
<< " and " << r.stamp() << " in field -= expression");
10167
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
10170
template<class T, class M, class Expr>
10171
field_component<T,M>
10172
operator-= (field_component<T,M> l, const field_expr<Expr>& r)
10174
const field_check_stamp_context check_stamp (l.stamp());
10175
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10176
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::minus_assign());
2402
10179
namespace field_detail {
2409
10186
field_basic<T,M>&
2410
10187
operator*= (field_basic<T,M>& l, const int& r)
2412
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10189
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2415
10192
template<class T1, class T2, class M>
2416
10193
field_basic<T1,M>&
2417
10194
operator*= (field_basic<T1,M>& l, const T2& r)
2419
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10196
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2422
10199
template<class T1, class T2, class M>
2423
10200
field_basic<T1,M>&
2424
10201
operator*= (field_basic<T1,M>& l, const field_basic<T2,M>& r)
2426
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2427
<< " and " << r.get_stamp() << " in field *= expression");
2428
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10203
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10204
<< " and " << r.stamp() << " in field *= expression");
10205
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2431
10208
template<class T1, class T2, class M>
2432
10209
field_basic<T1,M>&
2433
10210
operator*= (field_basic<T1,M>& l, const field_indirect<T2,M>& r)
2435
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2436
<< " and " << r.get_stamp() << " in field *= expression");
2437
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10212
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10213
<< " and " << r.stamp() << " in field *= expression");
10214
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2440
10217
template<class T1, class T2, class M>
2441
10218
field_basic<T1,M>&
2442
10219
operator*= (field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
2444
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2445
<< " and " << r.get_stamp() << " in field *= expression");
2446
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10221
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10222
<< " and " << r.stamp() << " in field *= expression");
10223
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10226
template<class T1, class T2, class M>
10228
operator*= (field_basic<T1,M>& l, const field_component<T2,M>& r)
10230
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10231
<< " and " << r.stamp() << " in field *= expression");
10232
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10235
template<class T1, class T2, class M>
10237
operator*= (field_basic<T1,M>& l, const field_component_const<T2,M>& r)
10239
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10240
<< " and " << r.stamp() << " in field *= expression");
10241
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2449
10244
template<class T, class M, class Expr>
2450
10245
field_basic<T,M>&
2451
10246
operator*= (field_basic<T,M>& l, const field_expr<Expr>& r)
2453
const field_check_stamp_context check_stamp (l.get_stamp());
10248
const field_check_stamp_context check_stamp (l.stamp());
2454
10249
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2455
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10250
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2458
10253
template<class T, class M>
2459
10254
field_indirect<T,M>
2460
10255
operator*= (field_indirect<T,M> l, const int& r)
2462
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10257
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2465
10260
template<class T1, class T2, class M>
2466
10261
field_indirect<T1,M>
2467
10262
operator*= (field_indirect<T1,M> l, const T2& r)
2469
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10264
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2472
10267
template<class T1, class T2, class M>
2473
10268
field_indirect<T1,M>
2474
10269
operator*= (field_indirect<T1,M> l, const field_basic<T2,M>& r)
2476
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2477
<< " and " << r.get_stamp() << " in field *= expression");
2478
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10271
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10272
<< " and " << r.stamp() << " in field *= expression");
10273
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2481
10276
template<class T1, class T2, class M>
2482
10277
field_indirect<T1,M>
2483
10278
operator*= (field_indirect<T1,M> l, const field_indirect<T2,M>& r)
2485
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2486
<< " and " << r.get_stamp() << " in field *= expression");
2487
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10280
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10281
<< " and " << r.stamp() << " in field *= expression");
10282
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2490
10285
template<class T1, class T2, class M>
2491
10286
field_indirect<T1,M>
2492
10287
operator*= (field_indirect<T1,M> l, const field_indirect_const<T2,M>& r)
2494
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2495
<< " and " << r.get_stamp() << " in field *= expression");
2496
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10289
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10290
<< " and " << r.stamp() << " in field *= expression");
10291
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10294
template<class T1, class T2, class M>
10295
field_indirect<T1,M>
10296
operator*= (field_indirect<T1,M> l, const field_component<T2,M>& r)
10298
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10299
<< " and " << r.stamp() << " in field *= expression");
10300
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10303
template<class T1, class T2, class M>
10304
field_indirect<T1,M>
10305
operator*= (field_indirect<T1,M> l, const field_component_const<T2,M>& r)
10307
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10308
<< " and " << r.stamp() << " in field *= expression");
10309
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2499
10312
template<class T, class M, class Expr>
2500
10313
field_indirect<T,M>
2501
10314
operator*= (field_indirect<T,M> l, const field_expr<Expr>& r)
2503
const field_check_stamp_context check_stamp (l.get_stamp());
2504
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2505
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10316
const field_check_stamp_context check_stamp (l.stamp());
10317
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10318
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10321
template<class T, class M>
10322
field_component<T,M>
10323
operator*= (field_component<T,M> l, const int& r)
10325
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10328
template<class T1, class T2, class M>
10329
field_component<T1,M>
10330
operator*= (field_component<T1,M> l, const T2& r)
10332
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10335
template<class T1, class T2, class M>
10336
field_component<T1,M>
10337
operator*= (field_component<T1,M> l, const field_basic<T2,M>& r)
10339
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10340
<< " and " << r.stamp() << " in field *= expression");
10341
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10344
template<class T1, class T2, class M>
10345
field_component<T1,M>
10346
operator*= (field_component<T1,M> l, const field_indirect<T2,M>& r)
10348
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10349
<< " and " << r.stamp() << " in field *= expression");
10350
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10353
template<class T1, class T2, class M>
10354
field_component<T1,M>
10355
operator*= (field_component<T1,M> l, const field_indirect_const<T2,M>& r)
10357
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10358
<< " and " << r.stamp() << " in field *= expression");
10359
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10362
template<class T1, class T2, class M>
10363
field_component<T1,M>
10364
operator*= (field_component<T1,M> l, const field_component<T2,M>& r)
10366
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10367
<< " and " << r.stamp() << " in field *= expression");
10368
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10371
template<class T1, class T2, class M>
10372
field_component<T1,M>
10373
operator*= (field_component<T1,M> l, const field_component_const<T2,M>& r)
10375
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10376
<< " and " << r.stamp() << " in field *= expression");
10377
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
10380
template<class T, class M, class Expr>
10381
field_component<T,M>
10382
operator*= (field_component<T,M> l, const field_expr<Expr>& r)
10384
const field_check_stamp_context check_stamp (l.stamp());
10385
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10386
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::multiplies_assign());
2508
10389
namespace field_detail {
2515
10396
field_basic<T,M>&
2516
10397
operator/= (field_basic<T,M>& l, const int& r)
2518
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10399
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2521
10402
template<class T1, class T2, class M>
2522
10403
field_basic<T1,M>&
2523
10404
operator/= (field_basic<T1,M>& l, const T2& r)
2525
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10406
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2528
10409
template<class T1, class T2, class M>
2529
10410
field_basic<T1,M>&
2530
10411
operator/= (field_basic<T1,M>& l, const field_basic<T2,M>& r)
2532
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2533
<< " and " << r.get_stamp() << " in field /= expression");
2534
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10413
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10414
<< " and " << r.stamp() << " in field /= expression");
10415
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2537
10418
template<class T1, class T2, class M>
2538
10419
field_basic<T1,M>&
2539
10420
operator/= (field_basic<T1,M>& l, const field_indirect<T2,M>& r)
2541
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2542
<< " and " << r.get_stamp() << " in field /= expression");
2543
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10422
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10423
<< " and " << r.stamp() << " in field /= expression");
10424
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2546
10427
template<class T1, class T2, class M>
2547
10428
field_basic<T1,M>&
2548
10429
operator/= (field_basic<T1,M>& l, const field_indirect_const<T2,M>& r)
2550
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2551
<< " and " << r.get_stamp() << " in field /= expression");
2552
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10431
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10432
<< " and " << r.stamp() << " in field /= expression");
10433
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10436
template<class T1, class T2, class M>
10438
operator/= (field_basic<T1,M>& l, const field_component<T2,M>& r)
10440
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10441
<< " and " << r.stamp() << " in field /= expression");
10442
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10445
template<class T1, class T2, class M>
10447
operator/= (field_basic<T1,M>& l, const field_component_const<T2,M>& r)
10449
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10450
<< " and " << r.stamp() << " in field /= expression");
10451
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2555
10454
template<class T, class M, class Expr>
2556
10455
field_basic<T,M>&
2557
10456
operator/= (field_basic<T,M>& l, const field_expr<Expr>& r)
2559
const field_check_stamp_context check_stamp (l.get_stamp());
10458
const field_check_stamp_context check_stamp (l.stamp());
2560
10459
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2561
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10460
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2564
10463
template<class T, class M>
2565
10464
field_indirect<T,M>
2566
10465
operator/= (field_indirect<T,M> l, const int& r)
2568
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10467
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2571
10470
template<class T1, class T2, class M>
2572
10471
field_indirect<T1,M>
2573
10472
operator/= (field_indirect<T1,M> l, const T2& r)
2575
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10474
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2578
10477
template<class T1, class T2, class M>
2579
10478
field_indirect<T1,M>
2580
10479
operator/= (field_indirect<T1,M> l, const field_basic<T2,M>& r)
2582
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2583
<< " and " << r.get_stamp() << " in field /= expression");
2584
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10481
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10482
<< " and " << r.stamp() << " in field /= expression");
10483
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2587
10486
template<class T1, class T2, class M>
2588
10487
field_indirect<T1,M>
2589
10488
operator/= (field_indirect<T1,M> l, const field_indirect<T2,M>& r)
2591
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2592
<< " and " << r.get_stamp() << " in field /= expression");
2593
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10490
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10491
<< " and " << r.stamp() << " in field /= expression");
10492
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2596
10495
template<class T1, class T2, class M>
2597
10496
field_indirect<T1,M>
2598
10497
operator/= (field_indirect<T1,M> l, const field_indirect_const<T2,M>& r)
2600
check_macro (l.get_stamp() == r.get_stamp(), "incompatible spaces " << l.get_stamp()
2601
<< " and " << r.get_stamp() << " in field /= expression");
2602
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10499
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10500
<< " and " << r.stamp() << " in field /= expression");
10501
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10504
template<class T1, class T2, class M>
10505
field_indirect<T1,M>
10506
operator/= (field_indirect<T1,M> l, const field_component<T2,M>& r)
10508
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10509
<< " and " << r.stamp() << " in field /= expression");
10510
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10513
template<class T1, class T2, class M>
10514
field_indirect<T1,M>
10515
operator/= (field_indirect<T1,M> l, const field_component_const<T2,M>& r)
10517
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10518
<< " and " << r.stamp() << " in field /= expression");
10519
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2605
10522
template<class T, class M, class Expr>
2606
10523
field_indirect<T,M>
2607
10524
operator/= (field_indirect<T,M> l, const field_expr<Expr>& r)
2609
const field_check_stamp_context check_stamp (l.get_stamp());
2610
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
2611
field_detail::evaluate (l.begin(), l.end(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10526
const field_check_stamp_context check_stamp (l.stamp());
10527
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10528
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10531
template<class T, class M>
10532
field_component<T,M>
10533
operator/= (field_component<T,M> l, const int& r)
10535
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10538
template<class T1, class T2, class M>
10539
field_component<T1,M>
10540
operator/= (field_component<T1,M> l, const T2& r)
10542
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10545
template<class T1, class T2, class M>
10546
field_component<T1,M>
10547
operator/= (field_component<T1,M> l, const field_basic<T2,M>& r)
10549
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10550
<< " and " << r.stamp() << " in field /= expression");
10551
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10554
template<class T1, class T2, class M>
10555
field_component<T1,M>
10556
operator/= (field_component<T1,M> l, const field_indirect<T2,M>& r)
10558
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10559
<< " and " << r.stamp() << " in field /= expression");
10560
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10563
template<class T1, class T2, class M>
10564
field_component<T1,M>
10565
operator/= (field_component<T1,M> l, const field_indirect_const<T2,M>& r)
10567
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10568
<< " and " << r.stamp() << " in field /= expression");
10569
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10572
template<class T1, class T2, class M>
10573
field_component<T1,M>
10574
operator/= (field_component<T1,M> l, const field_component<T2,M>& r)
10576
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10577
<< " and " << r.stamp() << " in field /= expression");
10578
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10581
template<class T1, class T2, class M>
10582
field_component<T1,M>
10583
operator/= (field_component<T1,M> l, const field_component_const<T2,M>& r)
10585
check_macro (l.stamp() == r.stamp(), "incompatible spaces " << l.stamp()
10586
<< " and " << r.stamp() << " in field /= expression");
10587
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
10590
template<class T, class M, class Expr>
10591
field_component<T,M>
10592
operator/= (field_component<T,M> l, const field_expr<Expr>& r)
10594
const field_check_stamp_context check_stamp (l.stamp());
10595
proto::eval (proto::as_expr<field_domain>(r), check_stamp);
10596
field_detail::evaluate (l.begin_dof(), l.end_dof(), proto::as_expr<field_domain>(r), field_detail::divides_assign());
2614
10599
namespace field_detail {
3891
12416
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12418
template<class T1, class T2, class M>
12419
typename boost::proto::result_of::make_expr<
12420
boost::proto::tag::function,
12422
const field_detail::atan2_,
12423
const field_indirect_const<T1,M>&,
12424
const field_component<T2,M>&
12426
atan2 (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
12428
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12430
template<class T1, class T2, class M>
12431
typename boost::proto::result_of::make_expr<
12432
boost::proto::tag::function,
12434
const field_detail::atan2_,
12435
const field_indirect_const<T1,M>&,
12436
const field_component_const<T2,M>&
12438
atan2 (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
12440
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12442
template<class T1, class T2, class M>
12443
typename boost::proto::result_of::make_expr<
12444
boost::proto::tag::function,
12446
const field_detail::atan2_,
12447
const field_component<T1,M>&,
12448
const field_basic<T2,M>&
12450
atan2 (const field_component<T1,M>& x, const field_basic<T2,M>& y)
12452
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12454
template<class T1, class T2, class M>
12455
typename boost::proto::result_of::make_expr<
12456
boost::proto::tag::function,
12458
const field_detail::atan2_,
12459
const field_component<T1,M>&,
12460
const field_indirect<T2,M>&
12462
atan2 (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
12464
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12466
template<class T1, class T2, class M>
12467
typename boost::proto::result_of::make_expr<
12468
boost::proto::tag::function,
12470
const field_detail::atan2_,
12471
const field_component<T1,M>&,
12472
const field_indirect_const<T2,M>&
12474
atan2 (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
12476
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12478
template<class T1, class T2, class M>
12479
typename boost::proto::result_of::make_expr<
12480
boost::proto::tag::function,
12482
const field_detail::atan2_,
12483
const field_component<T1,M>&,
12484
const field_component<T2,M>&
12486
atan2 (const field_component<T1,M>& x, const field_component<T2,M>& y)
12488
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12490
template<class T1, class T2, class M>
12491
typename boost::proto::result_of::make_expr<
12492
boost::proto::tag::function,
12494
const field_detail::atan2_,
12495
const field_component<T1,M>&,
12496
const field_component_const<T2,M>&
12498
atan2 (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
12500
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12502
template<class T1, class T2, class M>
12503
typename boost::proto::result_of::make_expr<
12504
boost::proto::tag::function,
12506
const field_detail::atan2_,
12507
const field_component_const<T1,M>&,
12508
const field_basic<T2,M>&
12510
atan2 (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
12512
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12514
template<class T1, class T2, class M>
12515
typename boost::proto::result_of::make_expr<
12516
boost::proto::tag::function,
12518
const field_detail::atan2_,
12519
const field_component_const<T1,M>&,
12520
const field_indirect<T2,M>&
12522
atan2 (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
12524
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12526
template<class T1, class T2, class M>
12527
typename boost::proto::result_of::make_expr<
12528
boost::proto::tag::function,
12530
const field_detail::atan2_,
12531
const field_component_const<T1,M>&,
12532
const field_indirect_const<T2,M>&
12534
atan2 (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
12536
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12538
template<class T1, class T2, class M>
12539
typename boost::proto::result_of::make_expr<
12540
boost::proto::tag::function,
12542
const field_detail::atan2_,
12543
const field_component_const<T1,M>&,
12544
const field_component<T2,M>&
12546
atan2 (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
12548
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
12550
template<class T1, class T2, class M>
12551
typename boost::proto::result_of::make_expr<
12552
boost::proto::tag::function,
12554
const field_detail::atan2_,
12555
const field_component_const<T1,M>&,
12556
const field_component_const<T2,M>&
12558
atan2 (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
12560
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::atan2_(), boost::ref(x), boost::ref(y));
3893
12562
template<class Expr>
3894
12563
typename boost::proto::result_of::make_expr<
3895
12564
boost::proto::tag::function,
4294
13155
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13157
template<class T1, class T2, class M>
13158
typename boost::proto::result_of::make_expr<
13159
boost::proto::tag::function,
13161
const field_detail::pow_,
13162
const field_indirect_const<T1,M>&,
13163
const field_component<T2,M>&
13165
pow (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
13167
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13169
template<class T1, class T2, class M>
13170
typename boost::proto::result_of::make_expr<
13171
boost::proto::tag::function,
13173
const field_detail::pow_,
13174
const field_indirect_const<T1,M>&,
13175
const field_component_const<T2,M>&
13177
pow (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
13179
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13181
template<class T1, class T2, class M>
13182
typename boost::proto::result_of::make_expr<
13183
boost::proto::tag::function,
13185
const field_detail::pow_,
13186
const field_component<T1,M>&,
13187
const field_basic<T2,M>&
13189
pow (const field_component<T1,M>& x, const field_basic<T2,M>& y)
13191
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13193
template<class T1, class T2, class M>
13194
typename boost::proto::result_of::make_expr<
13195
boost::proto::tag::function,
13197
const field_detail::pow_,
13198
const field_component<T1,M>&,
13199
const field_indirect<T2,M>&
13201
pow (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
13203
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13205
template<class T1, class T2, class M>
13206
typename boost::proto::result_of::make_expr<
13207
boost::proto::tag::function,
13209
const field_detail::pow_,
13210
const field_component<T1,M>&,
13211
const field_indirect_const<T2,M>&
13213
pow (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
13215
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13217
template<class T1, class T2, class M>
13218
typename boost::proto::result_of::make_expr<
13219
boost::proto::tag::function,
13221
const field_detail::pow_,
13222
const field_component<T1,M>&,
13223
const field_component<T2,M>&
13225
pow (const field_component<T1,M>& x, const field_component<T2,M>& y)
13227
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13229
template<class T1, class T2, class M>
13230
typename boost::proto::result_of::make_expr<
13231
boost::proto::tag::function,
13233
const field_detail::pow_,
13234
const field_component<T1,M>&,
13235
const field_component_const<T2,M>&
13237
pow (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
13239
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13241
template<class T1, class T2, class M>
13242
typename boost::proto::result_of::make_expr<
13243
boost::proto::tag::function,
13245
const field_detail::pow_,
13246
const field_component_const<T1,M>&,
13247
const field_basic<T2,M>&
13249
pow (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
13251
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13253
template<class T1, class T2, class M>
13254
typename boost::proto::result_of::make_expr<
13255
boost::proto::tag::function,
13257
const field_detail::pow_,
13258
const field_component_const<T1,M>&,
13259
const field_indirect<T2,M>&
13261
pow (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
13263
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13265
template<class T1, class T2, class M>
13266
typename boost::proto::result_of::make_expr<
13267
boost::proto::tag::function,
13269
const field_detail::pow_,
13270
const field_component_const<T1,M>&,
13271
const field_indirect_const<T2,M>&
13273
pow (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
13275
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13277
template<class T1, class T2, class M>
13278
typename boost::proto::result_of::make_expr<
13279
boost::proto::tag::function,
13281
const field_detail::pow_,
13282
const field_component_const<T1,M>&,
13283
const field_component<T2,M>&
13285
pow (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
13287
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
13289
template<class T1, class T2, class M>
13290
typename boost::proto::result_of::make_expr<
13291
boost::proto::tag::function,
13293
const field_detail::pow_,
13294
const field_component_const<T1,M>&,
13295
const field_component_const<T2,M>&
13297
pow (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
13299
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::pow_(), boost::ref(x), boost::ref(y));
4296
13301
template<class Expr>
4297
13302
typename boost::proto::result_of::make_expr<
4298
13303
boost::proto::tag::function,
4697
13894
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13896
template<class T1, class T2, class M>
13897
typename boost::proto::result_of::make_expr<
13898
boost::proto::tag::function,
13900
const field_detail::fmod_,
13901
const field_indirect_const<T1,M>&,
13902
const field_component<T2,M>&
13904
fmod (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
13906
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13908
template<class T1, class T2, class M>
13909
typename boost::proto::result_of::make_expr<
13910
boost::proto::tag::function,
13912
const field_detail::fmod_,
13913
const field_indirect_const<T1,M>&,
13914
const field_component_const<T2,M>&
13916
fmod (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
13918
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13920
template<class T1, class T2, class M>
13921
typename boost::proto::result_of::make_expr<
13922
boost::proto::tag::function,
13924
const field_detail::fmod_,
13925
const field_component<T1,M>&,
13926
const field_basic<T2,M>&
13928
fmod (const field_component<T1,M>& x, const field_basic<T2,M>& y)
13930
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13932
template<class T1, class T2, class M>
13933
typename boost::proto::result_of::make_expr<
13934
boost::proto::tag::function,
13936
const field_detail::fmod_,
13937
const field_component<T1,M>&,
13938
const field_indirect<T2,M>&
13940
fmod (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
13942
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13944
template<class T1, class T2, class M>
13945
typename boost::proto::result_of::make_expr<
13946
boost::proto::tag::function,
13948
const field_detail::fmod_,
13949
const field_component<T1,M>&,
13950
const field_indirect_const<T2,M>&
13952
fmod (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
13954
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13956
template<class T1, class T2, class M>
13957
typename boost::proto::result_of::make_expr<
13958
boost::proto::tag::function,
13960
const field_detail::fmod_,
13961
const field_component<T1,M>&,
13962
const field_component<T2,M>&
13964
fmod (const field_component<T1,M>& x, const field_component<T2,M>& y)
13966
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13968
template<class T1, class T2, class M>
13969
typename boost::proto::result_of::make_expr<
13970
boost::proto::tag::function,
13972
const field_detail::fmod_,
13973
const field_component<T1,M>&,
13974
const field_component_const<T2,M>&
13976
fmod (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
13978
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13980
template<class T1, class T2, class M>
13981
typename boost::proto::result_of::make_expr<
13982
boost::proto::tag::function,
13984
const field_detail::fmod_,
13985
const field_component_const<T1,M>&,
13986
const field_basic<T2,M>&
13988
fmod (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
13990
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
13992
template<class T1, class T2, class M>
13993
typename boost::proto::result_of::make_expr<
13994
boost::proto::tag::function,
13996
const field_detail::fmod_,
13997
const field_component_const<T1,M>&,
13998
const field_indirect<T2,M>&
14000
fmod (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
14002
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
14004
template<class T1, class T2, class M>
14005
typename boost::proto::result_of::make_expr<
14006
boost::proto::tag::function,
14008
const field_detail::fmod_,
14009
const field_component_const<T1,M>&,
14010
const field_indirect_const<T2,M>&
14012
fmod (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
14014
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
14016
template<class T1, class T2, class M>
14017
typename boost::proto::result_of::make_expr<
14018
boost::proto::tag::function,
14020
const field_detail::fmod_,
14021
const field_component_const<T1,M>&,
14022
const field_component<T2,M>&
14024
fmod (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
14026
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
14028
template<class T1, class T2, class M>
14029
typename boost::proto::result_of::make_expr<
14030
boost::proto::tag::function,
14032
const field_detail::fmod_,
14033
const field_component_const<T1,M>&,
14034
const field_component_const<T2,M>&
14036
fmod (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
14038
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::fmod_(), boost::ref(x), boost::ref(y));
4699
14040
template<class Expr>
4700
14041
typename boost::proto::result_of::make_expr<
4701
14042
boost::proto::tag::function,
5100
14633
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14635
template<class T1, class T2, class M>
14636
typename boost::proto::result_of::make_expr<
14637
boost::proto::tag::function,
14639
const field_detail::min_,
14640
const field_indirect_const<T1,M>&,
14641
const field_component<T2,M>&
14643
min (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
14645
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14647
template<class T1, class T2, class M>
14648
typename boost::proto::result_of::make_expr<
14649
boost::proto::tag::function,
14651
const field_detail::min_,
14652
const field_indirect_const<T1,M>&,
14653
const field_component_const<T2,M>&
14655
min (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
14657
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14659
template<class T1, class T2, class M>
14660
typename boost::proto::result_of::make_expr<
14661
boost::proto::tag::function,
14663
const field_detail::min_,
14664
const field_component<T1,M>&,
14665
const field_basic<T2,M>&
14667
min (const field_component<T1,M>& x, const field_basic<T2,M>& y)
14669
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14671
template<class T1, class T2, class M>
14672
typename boost::proto::result_of::make_expr<
14673
boost::proto::tag::function,
14675
const field_detail::min_,
14676
const field_component<T1,M>&,
14677
const field_indirect<T2,M>&
14679
min (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
14681
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14683
template<class T1, class T2, class M>
14684
typename boost::proto::result_of::make_expr<
14685
boost::proto::tag::function,
14687
const field_detail::min_,
14688
const field_component<T1,M>&,
14689
const field_indirect_const<T2,M>&
14691
min (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
14693
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14695
template<class T1, class T2, class M>
14696
typename boost::proto::result_of::make_expr<
14697
boost::proto::tag::function,
14699
const field_detail::min_,
14700
const field_component<T1,M>&,
14701
const field_component<T2,M>&
14703
min (const field_component<T1,M>& x, const field_component<T2,M>& y)
14705
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14707
template<class T1, class T2, class M>
14708
typename boost::proto::result_of::make_expr<
14709
boost::proto::tag::function,
14711
const field_detail::min_,
14712
const field_component<T1,M>&,
14713
const field_component_const<T2,M>&
14715
min (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
14717
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14719
template<class T1, class T2, class M>
14720
typename boost::proto::result_of::make_expr<
14721
boost::proto::tag::function,
14723
const field_detail::min_,
14724
const field_component_const<T1,M>&,
14725
const field_basic<T2,M>&
14727
min (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
14729
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14731
template<class T1, class T2, class M>
14732
typename boost::proto::result_of::make_expr<
14733
boost::proto::tag::function,
14735
const field_detail::min_,
14736
const field_component_const<T1,M>&,
14737
const field_indirect<T2,M>&
14739
min (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
14741
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14743
template<class T1, class T2, class M>
14744
typename boost::proto::result_of::make_expr<
14745
boost::proto::tag::function,
14747
const field_detail::min_,
14748
const field_component_const<T1,M>&,
14749
const field_indirect_const<T2,M>&
14751
min (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
14753
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14755
template<class T1, class T2, class M>
14756
typename boost::proto::result_of::make_expr<
14757
boost::proto::tag::function,
14759
const field_detail::min_,
14760
const field_component_const<T1,M>&,
14761
const field_component<T2,M>&
14763
min (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
14765
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
14767
template<class T1, class T2, class M>
14768
typename boost::proto::result_of::make_expr<
14769
boost::proto::tag::function,
14771
const field_detail::min_,
14772
const field_component_const<T1,M>&,
14773
const field_component_const<T2,M>&
14775
min (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
14777
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::min_(), boost::ref(x), boost::ref(y));
5102
14779
template<class Expr>
5103
14780
typename boost::proto::result_of::make_expr<
5104
14781
boost::proto::tag::function,
5503
15372
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15374
template<class T1, class T2, class M>
15375
typename boost::proto::result_of::make_expr<
15376
boost::proto::tag::function,
15378
const field_detail::max_,
15379
const field_indirect_const<T1,M>&,
15380
const field_component<T2,M>&
15382
max (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
15384
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15386
template<class T1, class T2, class M>
15387
typename boost::proto::result_of::make_expr<
15388
boost::proto::tag::function,
15390
const field_detail::max_,
15391
const field_indirect_const<T1,M>&,
15392
const field_component_const<T2,M>&
15394
max (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
15396
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15398
template<class T1, class T2, class M>
15399
typename boost::proto::result_of::make_expr<
15400
boost::proto::tag::function,
15402
const field_detail::max_,
15403
const field_component<T1,M>&,
15404
const field_basic<T2,M>&
15406
max (const field_component<T1,M>& x, const field_basic<T2,M>& y)
15408
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15410
template<class T1, class T2, class M>
15411
typename boost::proto::result_of::make_expr<
15412
boost::proto::tag::function,
15414
const field_detail::max_,
15415
const field_component<T1,M>&,
15416
const field_indirect<T2,M>&
15418
max (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
15420
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15422
template<class T1, class T2, class M>
15423
typename boost::proto::result_of::make_expr<
15424
boost::proto::tag::function,
15426
const field_detail::max_,
15427
const field_component<T1,M>&,
15428
const field_indirect_const<T2,M>&
15430
max (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
15432
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15434
template<class T1, class T2, class M>
15435
typename boost::proto::result_of::make_expr<
15436
boost::proto::tag::function,
15438
const field_detail::max_,
15439
const field_component<T1,M>&,
15440
const field_component<T2,M>&
15442
max (const field_component<T1,M>& x, const field_component<T2,M>& y)
15444
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15446
template<class T1, class T2, class M>
15447
typename boost::proto::result_of::make_expr<
15448
boost::proto::tag::function,
15450
const field_detail::max_,
15451
const field_component<T1,M>&,
15452
const field_component_const<T2,M>&
15454
max (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
15456
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15458
template<class T1, class T2, class M>
15459
typename boost::proto::result_of::make_expr<
15460
boost::proto::tag::function,
15462
const field_detail::max_,
15463
const field_component_const<T1,M>&,
15464
const field_basic<T2,M>&
15466
max (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
15468
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15470
template<class T1, class T2, class M>
15471
typename boost::proto::result_of::make_expr<
15472
boost::proto::tag::function,
15474
const field_detail::max_,
15475
const field_component_const<T1,M>&,
15476
const field_indirect<T2,M>&
15478
max (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
15480
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15482
template<class T1, class T2, class M>
15483
typename boost::proto::result_of::make_expr<
15484
boost::proto::tag::function,
15486
const field_detail::max_,
15487
const field_component_const<T1,M>&,
15488
const field_indirect_const<T2,M>&
15490
max (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
15492
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15494
template<class T1, class T2, class M>
15495
typename boost::proto::result_of::make_expr<
15496
boost::proto::tag::function,
15498
const field_detail::max_,
15499
const field_component_const<T1,M>&,
15500
const field_component<T2,M>&
15502
max (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
15504
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
15506
template<class T1, class T2, class M>
15507
typename boost::proto::result_of::make_expr<
15508
boost::proto::tag::function,
15510
const field_detail::max_,
15511
const field_component_const<T1,M>&,
15512
const field_component_const<T2,M>&
15514
max (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
15516
return boost::proto::make_expr<boost::proto::tag::function, field_domain> (field_detail::max_(), boost::ref(x), boost::ref(y));
5505
15518
template<class Expr>
5506
15519
typename boost::proto::result_of::make_expr<
5507
15520
boost::proto::tag::function,
5903
15988
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
5904
15989
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
15991
template<class Function, class T, class M>
15992
typename boost::proto::result_of::make_expr<
15993
boost::proto::tag::function,
15995
const field_detail::compose2_<Function>,
15997
const field_component<T,M>&
15999
compose (const Function& f, const int& x, const field_component<T,M>& y)
16001
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16002
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16004
template<class Function, class T, class M>
16005
typename boost::proto::result_of::make_expr<
16006
boost::proto::tag::function,
16008
const field_detail::compose2_<Function>,
16009
const field_component<T,M>&,
16012
compose (const Function& f, const field_component<T,M>& x, const int& y)
16014
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16015
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16017
template<class Function, class T1, class T2, class M>
16018
typename boost::proto::result_of::make_expr<
16019
boost::proto::tag::function,
16021
const field_detail::compose2_<Function>,
16023
const field_component<T2,M>&
16025
compose (const Function& f, const T1& x, const field_component<T2,M>& y)
16027
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16028
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16030
template<class Function, class T1, class T2, class M>
16031
typename boost::proto::result_of::make_expr<
16032
boost::proto::tag::function,
16034
const field_detail::compose2_<Function>,
16035
const field_component<T1,M>&,
16038
compose (const Function& f, const field_component<T1,M>& x, const T2& y)
16040
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16041
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16043
template<class Function, class T, class M>
16044
typename boost::proto::result_of::make_expr<
16045
boost::proto::tag::function,
16047
const field_detail::compose2_<Function>,
16049
const field_component_const<T,M>&
16051
compose (const Function& f, const int& x, const field_component_const<T,M>& y)
16053
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16054
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16056
template<class Function, class T, class M>
16057
typename boost::proto::result_of::make_expr<
16058
boost::proto::tag::function,
16060
const field_detail::compose2_<Function>,
16061
const field_component_const<T,M>&,
16064
compose (const Function& f, const field_component_const<T,M>& x, const int& y)
16066
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16067
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16069
template<class Function, class T1, class T2, class M>
16070
typename boost::proto::result_of::make_expr<
16071
boost::proto::tag::function,
16073
const field_detail::compose2_<Function>,
16075
const field_component_const<T2,M>&
16077
compose (const Function& f, const T1& x, const field_component_const<T2,M>& y)
16079
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16080
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16082
template<class Function, class T1, class T2, class M>
16083
typename boost::proto::result_of::make_expr<
16084
boost::proto::tag::function,
16086
const field_detail::compose2_<Function>,
16087
const field_component_const<T1,M>&,
16090
compose (const Function& f, const field_component_const<T1,M>& x, const T2& y)
16092
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16093
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
5906
16095
template<class Function, class T1, class T2, class M>
5907
16096
typename boost::proto::result_of::make_expr<
5908
16097
boost::proto::tag::function,
6020
16261
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
6021
16262
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16264
template<class Function, class T1, class T2, class M>
16265
typename boost::proto::result_of::make_expr<
16266
boost::proto::tag::function,
16268
const field_detail::compose2_<Function>,
16269
const field_indirect_const<T1,M>&,
16270
const field_component<T2,M>&
16272
compose (const Function& f, const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
16274
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16275
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16277
template<class Function, class T1, class T2, class M>
16278
typename boost::proto::result_of::make_expr<
16279
boost::proto::tag::function,
16281
const field_detail::compose2_<Function>,
16282
const field_indirect_const<T1,M>&,
16283
const field_component_const<T2,M>&
16285
compose (const Function& f, const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
16287
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16288
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16290
template<class Function, class T1, class T2, class M>
16291
typename boost::proto::result_of::make_expr<
16292
boost::proto::tag::function,
16294
const field_detail::compose2_<Function>,
16295
const field_component<T1,M>&,
16296
const field_basic<T2,M>&
16298
compose (const Function& f, const field_component<T1,M>& x, const field_basic<T2,M>& y)
16300
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16301
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16303
template<class Function, class T1, class T2, class M>
16304
typename boost::proto::result_of::make_expr<
16305
boost::proto::tag::function,
16307
const field_detail::compose2_<Function>,
16308
const field_component<T1,M>&,
16309
const field_indirect<T2,M>&
16311
compose (const Function& f, const field_component<T1,M>& x, const field_indirect<T2,M>& y)
16313
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16314
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16316
template<class Function, class T1, class T2, class M>
16317
typename boost::proto::result_of::make_expr<
16318
boost::proto::tag::function,
16320
const field_detail::compose2_<Function>,
16321
const field_component<T1,M>&,
16322
const field_indirect_const<T2,M>&
16324
compose (const Function& f, const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
16326
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16327
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16329
template<class Function, class T1, class T2, class M>
16330
typename boost::proto::result_of::make_expr<
16331
boost::proto::tag::function,
16333
const field_detail::compose2_<Function>,
16334
const field_component<T1,M>&,
16335
const field_component<T2,M>&
16337
compose (const Function& f, const field_component<T1,M>& x, const field_component<T2,M>& y)
16339
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16340
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16342
template<class Function, class T1, class T2, class M>
16343
typename boost::proto::result_of::make_expr<
16344
boost::proto::tag::function,
16346
const field_detail::compose2_<Function>,
16347
const field_component<T1,M>&,
16348
const field_component_const<T2,M>&
16350
compose (const Function& f, const field_component<T1,M>& x, const field_component_const<T2,M>& y)
16352
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16353
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16355
template<class Function, class T1, class T2, class M>
16356
typename boost::proto::result_of::make_expr<
16357
boost::proto::tag::function,
16359
const field_detail::compose2_<Function>,
16360
const field_component_const<T1,M>&,
16361
const field_basic<T2,M>&
16363
compose (const Function& f, const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
16365
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16366
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16368
template<class Function, class T1, class T2, class M>
16369
typename boost::proto::result_of::make_expr<
16370
boost::proto::tag::function,
16372
const field_detail::compose2_<Function>,
16373
const field_component_const<T1,M>&,
16374
const field_indirect<T2,M>&
16376
compose (const Function& f, const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
16378
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16379
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16381
template<class Function, class T1, class T2, class M>
16382
typename boost::proto::result_of::make_expr<
16383
boost::proto::tag::function,
16385
const field_detail::compose2_<Function>,
16386
const field_component_const<T1,M>&,
16387
const field_indirect_const<T2,M>&
16389
compose (const Function& f, const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
16391
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16392
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16394
template<class Function, class T1, class T2, class M>
16395
typename boost::proto::result_of::make_expr<
16396
boost::proto::tag::function,
16398
const field_detail::compose2_<Function>,
16399
const field_component_const<T1,M>&,
16400
const field_component<T2,M>&
16402
compose (const Function& f, const field_component_const<T1,M>& x, const field_component<T2,M>& y)
16404
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16405
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
16407
template<class Function, class T1, class T2, class M>
16408
typename boost::proto::result_of::make_expr<
16409
boost::proto::tag::function,
16411
const field_detail::compose2_<Function>,
16412
const field_component_const<T1,M>&,
16413
const field_component_const<T2,M>&
16415
compose (const Function& f, const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
16417
return boost::proto::make_expr<boost::proto::tag::function, field_domain>
16418
(field_detail::compose2_<Function>(f), boost::ref(x), boost::ref(y));
6023
16420
template<class Function, class Expr>
6024
16421
typename boost::proto::result_of::make_expr<
6025
16422
boost::proto::tag::function,
6168
16617
dot (const field_basic<T,M>& x, const int& y)
6170
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16619
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6172
16621
template <class T, class M>
6174
16623
dot (const int& x, const field_basic<T,M>& y)
6176
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16625
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6178
16627
template <class T1, class T2, class M>
6179
16628
typename promote<T1,T2>::type
6180
16629
dot (const field_basic<T1,M>& x, const T2& y)
6182
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16631
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6184
16633
template <class T1, class T2, class M>
6185
16634
typename promote<T1,T2>::type
6186
16635
dot (const T1& x, const field_basic<T2,M>& y)
6188
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16637
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6190
16639
template <class T, class M>
6192
16641
dot (const field_indirect<T,M>& x, const int& y)
6194
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16643
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6196
16645
template <class T, class M>
6198
16647
dot (const int& x, const field_indirect<T,M>& y)
6200
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16649
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6202
16651
template <class T1, class T2, class M>
6203
16652
typename promote<T1,T2>::type
6204
16653
dot (const field_indirect<T1,M>& x, const T2& y)
6206
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16655
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6208
16657
template <class T1, class T2, class M>
6209
16658
typename promote<T1,T2>::type
6210
16659
dot (const T1& x, const field_indirect<T2,M>& y)
6212
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16661
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6214
16663
template <class T, class M>
6216
16665
dot (const field_indirect_const<T,M>& x, const int& y)
6218
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16667
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6220
16669
template <class T, class M>
6222
16671
dot (const int& x, const field_indirect_const<T,M>& y)
6224
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16673
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6226
16675
template <class T1, class T2, class M>
6227
16676
typename promote<T1,T2>::type
6228
16677
dot (const field_indirect_const<T1,M>& x, const T2& y)
6230
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16679
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6232
16681
template <class T1, class T2, class M>
6233
16682
typename promote<T1,T2>::type
6234
16683
dot (const T1& x, const field_indirect_const<T2,M>& y)
6236
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16685
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
16687
template <class T, class M>
16689
dot (const field_component<T,M>& x, const int& y)
16691
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
16693
template <class T, class M>
16695
dot (const int& x, const field_component<T,M>& y)
16697
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
16699
template <class T1, class T2, class M>
16700
typename promote<T1,T2>::type
16701
dot (const field_component<T1,M>& x, const T2& y)
16703
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
16705
template <class T1, class T2, class M>
16706
typename promote<T1,T2>::type
16707
dot (const T1& x, const field_component<T2,M>& y)
16709
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
16711
template <class T, class M>
16713
dot (const field_component_const<T,M>& x, const int& y)
16715
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
16717
template <class T, class M>
16719
dot (const int& x, const field_component_const<T,M>& y)
16721
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
16723
template <class T1, class T2, class M>
16724
typename promote<T1,T2>::type
16725
dot (const field_component_const<T1,M>& x, const T2& y)
16727
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
16729
template <class T1, class T2, class M>
16730
typename promote<T1,T2>::type
16731
dot (const T1& x, const field_component_const<T2,M>& y)
16733
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6238
16735
template <class T1, class T2, class M>
6239
16736
typename promote<T1,T2>::type
6240
16737
dot (const field_basic<T1,M>& x, const field_basic<T2,M>& y)
6242
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16739
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6244
16741
template <class T1, class T2, class M>
6245
16742
typename promote<T1,T2>::type
6246
16743
dot (const field_basic<T1,M>& x, const field_indirect<T2,M>& y)
6248
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16745
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6250
16747
template <class T1, class T2, class M>
6251
16748
typename promote<T1,T2>::type
6252
16749
dot (const field_basic<T1,M>& x, const field_indirect_const<T2,M>& y)
6254
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16751
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16753
template <class T1, class T2, class M>
16754
typename promote<T1,T2>::type
16755
dot (const field_basic<T1,M>& x, const field_component<T2,M>& y)
16757
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16759
template <class T1, class T2, class M>
16760
typename promote<T1,T2>::type
16761
dot (const field_basic<T1,M>& x, const field_component_const<T2,M>& y)
16763
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6256
16765
template <class T1, class T2, class M>
6257
16766
typename promote<T1,T2>::type
6258
16767
dot (const field_indirect<T1,M>& x, const field_basic<T2,M>& y)
6260
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16769
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6262
16771
template <class T1, class T2, class M>
6263
16772
typename promote<T1,T2>::type
6264
16773
dot (const field_indirect<T1,M>& x, const field_indirect<T2,M>& y)
6266
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16775
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6268
16777
template <class T1, class T2, class M>
6269
16778
typename promote<T1,T2>::type
6270
16779
dot (const field_indirect<T1,M>& x, const field_indirect_const<T2,M>& y)
6272
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16781
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16783
template <class T1, class T2, class M>
16784
typename promote<T1,T2>::type
16785
dot (const field_indirect<T1,M>& x, const field_component<T2,M>& y)
16787
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16789
template <class T1, class T2, class M>
16790
typename promote<T1,T2>::type
16791
dot (const field_indirect<T1,M>& x, const field_component_const<T2,M>& y)
16793
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6274
16795
template <class T1, class T2, class M>
6275
16796
typename promote<T1,T2>::type
6276
16797
dot (const field_indirect_const<T1,M>& x, const field_basic<T2,M>& y)
6278
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16799
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6280
16801
template <class T1, class T2, class M>
6281
16802
typename promote<T1,T2>::type
6282
16803
dot (const field_indirect_const<T1,M>& x, const field_indirect<T2,M>& y)
6284
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16805
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6286
16807
template <class T1, class T2, class M>
6287
16808
typename promote<T1,T2>::type
6288
16809
dot (const field_indirect_const<T1,M>& x, const field_indirect_const<T2,M>& y)
6290
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16811
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16813
template <class T1, class T2, class M>
16814
typename promote<T1,T2>::type
16815
dot (const field_indirect_const<T1,M>& x, const field_component<T2,M>& y)
16817
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16819
template <class T1, class T2, class M>
16820
typename promote<T1,T2>::type
16821
dot (const field_indirect_const<T1,M>& x, const field_component_const<T2,M>& y)
16823
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16825
template <class T1, class T2, class M>
16826
typename promote<T1,T2>::type
16827
dot (const field_component<T1,M>& x, const field_basic<T2,M>& y)
16829
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16831
template <class T1, class T2, class M>
16832
typename promote<T1,T2>::type
16833
dot (const field_component<T1,M>& x, const field_indirect<T2,M>& y)
16835
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16837
template <class T1, class T2, class M>
16838
typename promote<T1,T2>::type
16839
dot (const field_component<T1,M>& x, const field_indirect_const<T2,M>& y)
16841
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16843
template <class T1, class T2, class M>
16844
typename promote<T1,T2>::type
16845
dot (const field_component<T1,M>& x, const field_component<T2,M>& y)
16847
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16849
template <class T1, class T2, class M>
16850
typename promote<T1,T2>::type
16851
dot (const field_component<T1,M>& x, const field_component_const<T2,M>& y)
16853
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16855
template <class T1, class T2, class M>
16856
typename promote<T1,T2>::type
16857
dot (const field_component_const<T1,M>& x, const field_basic<T2,M>& y)
16859
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16861
template <class T1, class T2, class M>
16862
typename promote<T1,T2>::type
16863
dot (const field_component_const<T1,M>& x, const field_indirect<T2,M>& y)
16865
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16867
template <class T1, class T2, class M>
16868
typename promote<T1,T2>::type
16869
dot (const field_component_const<T1,M>& x, const field_indirect_const<T2,M>& y)
16871
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16873
template <class T1, class T2, class M>
16874
typename promote<T1,T2>::type
16875
dot (const field_component_const<T1,M>& x, const field_component<T2,M>& y)
16877
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16879
template <class T1, class T2, class M>
16880
typename promote<T1,T2>::type
16881
dot (const field_component_const<T1,M>& x, const field_component_const<T2,M>& y)
16883
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6292
16885
template <class Expr>
6293
typename field_expr<Expr>::element_type
16886
typename field_expr<Expr>::value_type
6294
16887
dot (const field_expr<Expr>& x, const int& y)
6296
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16889
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6298
16891
template <class Expr>
6299
typename field_expr<Expr>::element_type
16892
typename field_expr<Expr>::value_type
6300
16893
dot (const int& x, const field_expr<Expr>& y)
6302
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16895
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6304
16897
template <class T, class Expr>
6305
typename promote<T,typename field_expr<Expr>::element_type>::type
16898
typename promote<T,typename field_expr<Expr>::value_type>::type
6306
16899
dot (const field_expr<Expr>& x, const T& y)
6308
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
16901
return y*dis_accumulate (x.begin_dof(), x.ndof(), x.ownership().comm());
6310
16903
template <class T, class Expr>
6311
typename promote<T,typename field_expr<Expr>::element_type>::type
16904
typename promote<T,typename field_expr<Expr>::value_type>::type
6312
16905
dot (const T& x, const field_expr<Expr>& y)
6314
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
16907
return x*dis_accumulate (y.begin_dof(), y.ndof(), y.ownership().comm());
6316
16909
template <class T, class M, class Expr>
6317
typename promote<T,typename field_expr<Expr>::element_type>::type
16910
typename promote<T,typename field_expr<Expr>::value_type>::type
6318
16911
dot (const field_basic<T,M>& x, const field_expr<Expr>& y)
6320
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16913
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6322
16915
template <class T, class M, class Expr>
6323
typename promote<T,typename field_expr<Expr>::element_type>::type
16916
typename promote<T,typename field_expr<Expr>::value_type>::type
6324
16917
dot (const field_expr<Expr>& x, const field_basic<T,M>& y)
6326
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16919
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6328
16921
template <class T, class M, class Expr>
6329
typename promote<T,typename field_expr<Expr>::element_type>::type
16922
typename promote<T,typename field_expr<Expr>::value_type>::type
6330
16923
dot (const field_indirect<T,M>& x, const field_expr<Expr>& y)
6332
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16925
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6334
16927
template <class T, class M, class Expr>
6335
typename promote<T,typename field_expr<Expr>::element_type>::type
16928
typename promote<T,typename field_expr<Expr>::value_type>::type
6336
16929
dot (const field_expr<Expr>& x, const field_indirect<T,M>& y)
6338
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16931
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6340
16933
template <class T, class M, class Expr>
6341
typename promote<T,typename field_expr<Expr>::element_type>::type
16934
typename promote<T,typename field_expr<Expr>::value_type>::type
6342
16935
dot (const field_indirect_const<T,M>& x, const field_expr<Expr>& y)
6344
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16937
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6346
16939
template <class T, class M, class Expr>
6347
typename promote<T,typename field_expr<Expr>::element_type>::type
16940
typename promote<T,typename field_expr<Expr>::value_type>::type
6348
16941
dot (const field_expr<Expr>& x, const field_indirect_const<T,M>& y)
6350
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16943
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16945
template <class T, class M, class Expr>
16946
typename promote<T,typename field_expr<Expr>::value_type>::type
16947
dot (const field_component<T,M>& x, const field_expr<Expr>& y)
16949
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16951
template <class T, class M, class Expr>
16952
typename promote<T,typename field_expr<Expr>::value_type>::type
16953
dot (const field_expr<Expr>& x, const field_component<T,M>& y)
16955
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16957
template <class T, class M, class Expr>
16958
typename promote<T,typename field_expr<Expr>::value_type>::type
16959
dot (const field_component_const<T,M>& x, const field_expr<Expr>& y)
16961
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
16963
template <class T, class M, class Expr>
16964
typename promote<T,typename field_expr<Expr>::value_type>::type
16965
dot (const field_expr<Expr>& x, const field_component_const<T,M>& y)
16967
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6352
16969
template <class Expr1, class Expr2>
6353
16970
typename promote<
6354
typename field_expr<Expr1>::element_type,
6355
typename field_expr<Expr2>::element_type
16971
typename field_expr<Expr1>::value_type,
16972
typename field_expr<Expr2>::value_type
6357
16974
dot (const field_expr<Expr1>& x, const field_expr<Expr2>& y)
6359
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
16976
return dis_inner_product (x.begin_dof(), y.begin_dof(), x.ndof(), x.ownership().comm());
6361
16978
} // namespace rheolef
6362
16979
#endif // _RHEOLEF_FIELD_EXPR_OPS_H