1 #ifndef _RHEOLEF_FIELD_EXPR_OPS_H
2 #define _RHEOLEF_FIELD_EXPR_OPS_H
6 #include "rheolef/promote.h"
7 #include "rheolef/field_expr.h"
9 template<
class T,
class M>
10 #if BOOST_VERSION < 104601
11 typename boost::proto::detail::enable_unary<
13 is_field<field_basic<T,M> >,
15 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
16 ::impl<const field_basic<T,M>&>::result_type
20 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
21 ::impl<const field_basic<T,M>&>()(arg);
23 #else // BOOST_VERSION >= 104601
24 typename boost::proto::detail::enable_unary<
26 field_domain::proto_grammar,
28 is_field<field_basic<T,M> >,
29 boost::mpl::not_<boost::proto::is_extension<field_basic<T,M> > >
31 boost::proto::tag::unary_plus,
32 field_basic<T,M>
const &
36 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_basic<T,M>
const &>()(arg);
38 #endif // BOOST_VERSION
39 template<
class T,
class M>
40 #if BOOST_VERSION < 104601
41 typename boost::proto::detail::enable_unary<
43 is_field<field_indirect<T,M> >,
45 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
46 ::impl<const field_indirect<T,M>&>::result_type
50 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
51 ::impl<const field_indirect<T,M>&>()(arg);
53 #else // BOOST_VERSION >= 104601
54 typename boost::proto::detail::enable_unary<
56 field_domain::proto_grammar,
58 is_field<field_indirect<T,M> >,
59 boost::mpl::not_<boost::proto::is_extension<field_indirect<T,M> > >
61 boost::proto::tag::unary_plus,
62 field_indirect<T,M>
const &
64 operator+ (
const field_indirect<T,M>& arg)
66 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_indirect<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_const<T,M> >,
74 field_indirect_const<T,M>,
75 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
76 ::impl<const field_indirect_const<T,M>&>::result_type
80 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
81 ::impl<const field_indirect_const<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_const<T,M> >,
89 boost::mpl::not_<boost::proto::is_extension<field_indirect_const<T,M> > >
91 boost::proto::tag::unary_plus,
92 field_indirect_const<T,M>
const &
94 operator+ (
const field_indirect_const<T,M>& arg)
96 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_indirect_const<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_component<T,M> >,
104 field_component<T,M>,
105 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
106 ::impl<const field_component<T,M>&>::result_type
110 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
111 ::impl<const field_component<T,M>&>()(arg);
113 #else // BOOST_VERSION >= 104601
114 typename boost::proto::detail::enable_unary<
116 field_domain::proto_grammar,
118 is_field<field_component<T,M> >,
119 boost::mpl::not_<boost::proto::is_extension<field_component<T,M> > >
121 boost::proto::tag::unary_plus,
122 field_component<T,M>
const &
124 operator+ (
const field_component<T,M>& arg)
126 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_component<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_const<T,M> >,
134 field_component_const<T,M>,
135 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
136 ::impl<const field_component_const<T,M>&>::result_type
140 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
141 ::impl<const field_component_const<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_const<T,M> >,
149 boost::mpl::not_<boost::proto::is_extension<field_component_const<T,M> > >
151 boost::proto::tag::unary_plus,
152 field_component_const<T,M>
const &
154 operator+ (
const field_component_const<T,M>& arg)
156 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_component_const<T,M>
const &>()(arg);
158 #endif // BOOST_VERSION
160 #if BOOST_VERSION < 104601
161 typename boost::proto::detail::enable_unary<
163 is_field<field_expr<Expr> >,
165 typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
166 ::impl<const field_expr<Expr>&>::result_type
170 return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, field_domain>
171 ::impl<const field_expr<Expr>&>()(arg);
173 #else // BOOST_VERSION >= 104601
174 typename boost::proto::detail::enable_unary<
176 field_domain::proto_grammar,
178 is_field<field_expr<Expr> >,
179 boost::mpl::not_<boost::proto::is_extension<field_expr<Expr> > >
181 boost::proto::tag::unary_plus,
182 field_expr<Expr>
const &
186 return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, field_domain, field_expr<Expr>
const &>()(arg);
188 #endif // BOOST_VERSION
189 template<
class T,
class M>
190 #if BOOST_VERSION < 104601
191 typename boost::proto::detail::enable_unary<
193 is_field<field_basic<T,M> >,
195 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
196 ::impl<const field_basic<T,M>&>::result_type
200 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
201 ::impl<const field_basic<T,M>&>()(arg);
203 #else // BOOST_VERSION >= 104601
204 typename boost::proto::detail::enable_unary<
206 field_domain::proto_grammar,
208 is_field<field_basic<T,M> >,
209 boost::mpl::not_<boost::proto::is_extension<field_basic<T,M> > >
211 boost::proto::tag::negate,
212 field_basic<T,M>
const &
216 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_basic<T,M>
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_indirect<T,M> >,
225 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
226 ::impl<const field_indirect<T,M>&>::result_type
230 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
231 ::impl<const field_indirect<T,M>&>()(arg);
233 #else // BOOST_VERSION >= 104601
234 typename boost::proto::detail::enable_unary<
236 field_domain::proto_grammar,
238 is_field<field_indirect<T,M> >,
239 boost::mpl::not_<boost::proto::is_extension<field_indirect<T,M> > >
241 boost::proto::tag::negate,
242 field_indirect<T,M>
const &
244 operator- (
const field_indirect<T,M>& arg)
246 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_indirect<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_const<T,M> >,
254 field_indirect_const<T,M>,
255 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
256 ::impl<const field_indirect_const<T,M>&>::result_type
260 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
261 ::impl<const field_indirect_const<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_const<T,M> >,
269 boost::mpl::not_<boost::proto::is_extension<field_indirect_const<T,M> > >
271 boost::proto::tag::negate,
272 field_indirect_const<T,M>
const &
274 operator- (
const field_indirect_const<T,M>& arg)
276 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_indirect_const<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_component<T,M> >,
284 field_component<T,M>,
285 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
286 ::impl<const field_component<T,M>&>::result_type
290 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
291 ::impl<const field_component<T,M>&>()(arg);
293 #else // BOOST_VERSION >= 104601
294 typename boost::proto::detail::enable_unary<
296 field_domain::proto_grammar,
298 is_field<field_component<T,M> >,
299 boost::mpl::not_<boost::proto::is_extension<field_component<T,M> > >
301 boost::proto::tag::negate,
302 field_component<T,M>
const &
304 operator- (
const field_component<T,M>& arg)
306 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_component<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_const<T,M> >,
314 field_component_const<T,M>,
315 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
316 ::impl<const field_component_const<T,M>&>::result_type
320 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
321 ::impl<const field_component_const<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_const<T,M> >,
329 boost::mpl::not_<boost::proto::is_extension<field_component_const<T,M> > >
331 boost::proto::tag::negate,
332 field_component_const<T,M>
const &
334 operator- (
const field_component_const<T,M>& arg)
336 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_component_const<T,M>
const &>()(arg);
338 #endif // BOOST_VERSION
340 #if BOOST_VERSION < 104601
341 typename boost::proto::detail::enable_unary<
343 is_field<field_expr<Expr> >,
345 typename boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
346 ::impl<const field_expr<Expr>&>::result_type
350 return boost::proto::functional::make_expr<boost::proto::tag::negate, field_domain>
351 ::impl<const field_expr<Expr>&>()(arg);
353 #else // BOOST_VERSION >= 104601
354 typename boost::proto::detail::enable_unary<
356 field_domain::proto_grammar,
358 is_field<field_expr<Expr> >,
359 boost::mpl::not_<boost::proto::is_extension<field_expr<Expr> > >
361 boost::proto::tag::negate,
362 field_expr<Expr>
const &
366 return boost::proto::detail::make_expr_<boost::proto::tag::negate, field_domain, field_expr<Expr>
const &>()(arg);
368 #endif // BOOST_VERSION
369 template<
class T,
class M>
370 #if BOOST_VERSION < 104601
372 boost::proto::detail::enable_binary<
376 is_field<field_basic<T,M> >,
378 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
379 ::impl<const int&, const field_basic<T,M>&>::result_type
const
383 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
384 ::impl<const int&, const field_basic<T,M>&>() (l, r);
386 #else // BOOST_VERSION >= 104601
387 typename boost::proto::detail::enable_binary<
389 field_domain::proto_grammar,
391 boost::mpl::or_<is_field<int >, is_field<field_basic<T,M> > >,
394 boost::proto::is_extension<int >,
395 boost::proto::is_extension<field_basic<T,M> >
399 boost::proto::tag::plus,
401 field_basic<T,M>
const &
403 operator+ (
int const &left, field_basic<T,M>
const &right)
405 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_basic<T,M>
const &>()(left, right);
407 #endif // BOOST_VERSION
408 template<
class T,
class M>
409 #if BOOST_VERSION < 104601
411 boost::proto::detail::enable_binary<
415 is_field<field_basic<T,M> >,
417 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
418 ::impl<const T&, const field_basic<T,M>&>::result_type
const
422 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
423 ::impl<const T&, const field_basic<T,M>&>() (l, r);
425 #else // BOOST_VERSION >= 104601
426 typename boost::proto::detail::enable_binary<
428 field_domain::proto_grammar,
430 boost::mpl::or_<is_field<T >, is_field<field_basic<T,M> > >,
433 boost::proto::is_extension<T >,
434 boost::proto::is_extension<field_basic<T,M> >
438 boost::proto::tag::plus,
440 field_basic<T,M>
const &
442 operator+ (T
const &left, field_basic<T,M>
const &right)
444 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_basic<T,M>
const &>()(left, right);
446 #endif // BOOST_VERSION
447 template<
class T,
class M>
448 #if BOOST_VERSION < 104601
450 boost::proto::detail::enable_binary<
454 is_field<field_indirect<T,M> >,
456 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
457 ::impl<const int&, const field_indirect<T,M>&>::result_type
const
461 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
462 ::impl<const int&, const field_indirect<T,M>&>() (l, r);
464 #else // BOOST_VERSION >= 104601
465 typename boost::proto::detail::enable_binary<
467 field_domain::proto_grammar,
469 boost::mpl::or_<is_field<int >, is_field<field_indirect<T,M> > >,
472 boost::proto::is_extension<int >,
473 boost::proto::is_extension<field_indirect<T,M> >
477 boost::proto::tag::plus,
479 field_indirect<T,M>
const &
481 operator+ (
int const &left, field_indirect<T,M>
const &right)
483 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_indirect<T,M>
const &>()(left, right);
485 #endif // BOOST_VERSION
486 template<
class T,
class M>
487 #if BOOST_VERSION < 104601
489 boost::proto::detail::enable_binary<
493 is_field<field_indirect<T,M> >,
495 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
496 ::impl<const T&, const field_indirect<T,M>&>::result_type
const
500 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
501 ::impl<const T&, const field_indirect<T,M>&>() (l, r);
503 #else // BOOST_VERSION >= 104601
504 typename boost::proto::detail::enable_binary<
506 field_domain::proto_grammar,
508 boost::mpl::or_<is_field<T >, is_field<field_indirect<T,M> > >,
511 boost::proto::is_extension<T >,
512 boost::proto::is_extension<field_indirect<T,M> >
516 boost::proto::tag::plus,
518 field_indirect<T,M>
const &
520 operator+ (T
const &left, field_indirect<T,M>
const &right)
522 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_indirect<T,M>
const &>()(left, right);
524 #endif // BOOST_VERSION
525 template<
class T,
class M>
526 #if BOOST_VERSION < 104601
528 boost::proto::detail::enable_binary<
532 is_field<field_indirect_const<T,M> >,
533 field_indirect_const<T,M>,
534 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
535 ::impl<const int&, const field_indirect_const<T,M>&>::result_type
const
539 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
540 ::impl<const int&, const field_indirect_const<T,M>&>() (l, r);
542 #else // BOOST_VERSION >= 104601
543 typename boost::proto::detail::enable_binary<
545 field_domain::proto_grammar,
547 boost::mpl::or_<is_field<int >, is_field<field_indirect_const<T,M> > >,
550 boost::proto::is_extension<int >,
551 boost::proto::is_extension<field_indirect_const<T,M> >
555 boost::proto::tag::plus,
557 field_indirect_const<T,M>
const &
559 operator+ (
int const &left, field_indirect_const<T,M>
const &right)
561 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_indirect_const<T,M>
const &>()(left, right);
563 #endif // BOOST_VERSION
564 template<
class T,
class M>
565 #if BOOST_VERSION < 104601
567 boost::proto::detail::enable_binary<
571 is_field<field_indirect_const<T,M> >,
572 field_indirect_const<T,M>,
573 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
574 ::impl<const T&, const field_indirect_const<T,M>&>::result_type
const
578 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
579 ::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
581 #else // BOOST_VERSION >= 104601
582 typename boost::proto::detail::enable_binary<
584 field_domain::proto_grammar,
586 boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
589 boost::proto::is_extension<T >,
590 boost::proto::is_extension<field_indirect_const<T,M> >
594 boost::proto::tag::plus,
596 field_indirect_const<T,M>
const &
598 operator+ (T
const &left, field_indirect_const<T,M>
const &right)
600 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_indirect_const<T,M>
const &>()(left, right);
602 #endif // BOOST_VERSION
603 template<
class T,
class M>
604 #if BOOST_VERSION < 104601
606 boost::proto::detail::enable_binary<
610 is_field<field_component<T,M> >,
611 field_component<T,M>,
612 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
613 ::impl<const int&, const field_component<T,M>&>::result_type
const
617 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
618 ::impl<const int&, const field_component<T,M>&>() (l, r);
620 #else // BOOST_VERSION >= 104601
621 typename boost::proto::detail::enable_binary<
623 field_domain::proto_grammar,
625 boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
628 boost::proto::is_extension<int >,
629 boost::proto::is_extension<field_component<T,M> >
633 boost::proto::tag::plus,
635 field_component<T,M>
const &
637 operator+ (
int const &left, field_component<T,M>
const &right)
639 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_component<T,M>
const &>()(left, right);
641 #endif // BOOST_VERSION
642 template<
class T,
class M>
643 #if BOOST_VERSION < 104601
645 boost::proto::detail::enable_binary<
649 is_field<field_component<T,M> >,
650 field_component<T,M>,
651 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
652 ::impl<const T&, const field_component<T,M>&>::result_type
const
656 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
657 ::impl<const T&, const field_component<T,M>&>() (l, r);
659 #else // BOOST_VERSION >= 104601
660 typename boost::proto::detail::enable_binary<
662 field_domain::proto_grammar,
664 boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
667 boost::proto::is_extension<T >,
668 boost::proto::is_extension<field_component<T,M> >
672 boost::proto::tag::plus,
674 field_component<T,M>
const &
676 operator+ (T
const &left, field_component<T,M>
const &right)
678 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_component<T,M>
const &>()(left, right);
680 #endif // BOOST_VERSION
681 template<
class T,
class M>
682 #if BOOST_VERSION < 104601
684 boost::proto::detail::enable_binary<
688 is_field<field_component_const<T,M> >,
689 field_component_const<T,M>,
690 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
691 ::impl<const int&, const field_component_const<T,M>&>::result_type
const
695 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
696 ::impl<const int&, const field_component_const<T,M>&>() (l, r);
698 #else // BOOST_VERSION >= 104601
699 typename boost::proto::detail::enable_binary<
701 field_domain::proto_grammar,
703 boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
706 boost::proto::is_extension<int >,
707 boost::proto::is_extension<field_component_const<T,M> >
711 boost::proto::tag::plus,
713 field_component_const<T,M>
const &
715 operator+ (
int const &left, field_component_const<T,M>
const &right)
717 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_component_const<T,M>
const &>()(left, right);
719 #endif // BOOST_VERSION
720 template<
class T,
class M>
721 #if BOOST_VERSION < 104601
723 boost::proto::detail::enable_binary<
727 is_field<field_component_const<T,M> >,
728 field_component_const<T,M>,
729 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
730 ::impl<const T&, const field_component_const<T,M>&>::result_type
const
734 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
735 ::impl<const T&, const field_component_const<T,M>&>() (l, r);
737 #else // BOOST_VERSION >= 104601
738 typename boost::proto::detail::enable_binary<
740 field_domain::proto_grammar,
742 boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
745 boost::proto::is_extension<T >,
746 boost::proto::is_extension<field_component_const<T,M> >
750 boost::proto::tag::plus,
752 field_component_const<T,M>
const &
754 operator+ (T
const &left, field_component_const<T,M>
const &right)
756 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_component_const<T,M>
const &>()(left, right);
758 #endif // BOOST_VERSION
759 template<
class T,
class M>
760 #if BOOST_VERSION < 104601
762 boost::proto::detail::enable_binary<
764 is_field<field_basic<T,M> >,
768 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
769 ::impl<const field_basic<T,M>&,
const int&>::result_type
const
773 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
774 ::impl<const field_basic<T,M>&,
const int&>() (l, r);
776 #else // BOOST_VERSION >= 104601
777 typename boost::proto::detail::enable_binary<
779 field_domain::proto_grammar,
781 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<int > >,
784 boost::proto::is_extension<field_basic<T,M> >,
785 boost::proto::is_extension<int >
789 boost::proto::tag::plus,
790 field_basic<T,M>
const &,
793 operator+ (field_basic<T,M>
const &left,
int const &right)
795 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T,M>
const &,
int const &>()(left, right);
797 #endif // BOOST_VERSION
798 template<
class T,
class M>
799 #if BOOST_VERSION < 104601
801 boost::proto::detail::enable_binary<
803 is_field<field_basic<T,M> >,
807 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
808 ::impl<const field_basic<T,M>&,
const T&>::result_type
const
812 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
813 ::impl<const field_basic<T,M>&,
const T&>() (l, r);
815 #else // BOOST_VERSION >= 104601
816 typename boost::proto::detail::enable_binary<
818 field_domain::proto_grammar,
820 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<T > >,
823 boost::proto::is_extension<field_basic<T,M> >,
824 boost::proto::is_extension<T >
828 boost::proto::tag::plus,
829 field_basic<T,M>
const &,
832 operator+ (field_basic<T,M>
const &left, T
const &right)
834 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T,M>
const &, T
const &>()(left, right);
836 #endif // BOOST_VERSION
837 template<
class T,
class M>
838 #if BOOST_VERSION < 104601
840 boost::proto::detail::enable_binary<
842 is_field<field_indirect<T,M> >,
846 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
847 ::impl<const field_indirect<T,M>&,
const int&>::result_type
const
851 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
852 ::impl<const field_indirect<T,M>&,
const int&>() (l, r);
854 #else // BOOST_VERSION >= 104601
855 typename boost::proto::detail::enable_binary<
857 field_domain::proto_grammar,
859 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<int > >,
862 boost::proto::is_extension<field_indirect<T,M> >,
863 boost::proto::is_extension<int >
867 boost::proto::tag::plus,
868 field_indirect<T,M>
const &,
871 operator+ (field_indirect<T,M>
const &left,
int const &right)
873 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T,M>
const &,
int const &>()(left, right);
875 #endif // BOOST_VERSION
876 template<
class T,
class M>
877 #if BOOST_VERSION < 104601
879 boost::proto::detail::enable_binary<
881 is_field<field_indirect<T,M> >,
885 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
886 ::impl<const field_indirect<T,M>&,
const T&>::result_type
const
890 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
891 ::impl<const field_indirect<T,M>&,
const T&>() (l, r);
893 #else // BOOST_VERSION >= 104601
894 typename boost::proto::detail::enable_binary<
896 field_domain::proto_grammar,
898 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<T > >,
901 boost::proto::is_extension<field_indirect<T,M> >,
902 boost::proto::is_extension<T >
906 boost::proto::tag::plus,
907 field_indirect<T,M>
const &,
910 operator+ (field_indirect<T,M>
const &left, T
const &right)
912 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T,M>
const &, T
const &>()(left, right);
914 #endif // BOOST_VERSION
915 template<
class T,
class M>
916 #if BOOST_VERSION < 104601
918 boost::proto::detail::enable_binary<
920 is_field<field_indirect_const<T,M> >,
921 field_indirect_const<T,M>,
924 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
925 ::impl<const field_indirect_const<T,M>&,
const int&>::result_type
const
929 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
930 ::impl<const field_indirect_const<T,M>&,
const int&>() (l, r);
932 #else // BOOST_VERSION >= 104601
933 typename boost::proto::detail::enable_binary<
935 field_domain::proto_grammar,
937 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<int > >,
940 boost::proto::is_extension<field_indirect_const<T,M> >,
941 boost::proto::is_extension<int >
945 boost::proto::tag::plus,
946 field_indirect_const<T,M>
const &,
949 operator+ (field_indirect_const<T,M>
const &left,
int const &right)
951 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T,M>
const &,
int const &>()(left, right);
953 #endif // BOOST_VERSION
954 template<
class T,
class M>
955 #if BOOST_VERSION < 104601
957 boost::proto::detail::enable_binary<
959 is_field<field_indirect_const<T,M> >,
960 field_indirect_const<T,M>,
963 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
964 ::impl<const field_indirect_const<T,M>&,
const T&>::result_type
const
968 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
969 ::impl<const field_indirect_const<T,M>&,
const T&>() (l, r);
971 #else // BOOST_VERSION >= 104601
972 typename boost::proto::detail::enable_binary<
974 field_domain::proto_grammar,
976 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
979 boost::proto::is_extension<field_indirect_const<T,M> >,
980 boost::proto::is_extension<T >
984 boost::proto::tag::plus,
985 field_indirect_const<T,M>
const &,
988 operator+ (field_indirect_const<T,M>
const &left, T
const &right)
990 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T,M>
const &, T
const &>()(left, right);
992 #endif // BOOST_VERSION
993 template<
class T,
class M>
994 #if BOOST_VERSION < 104601
996 boost::proto::detail::enable_binary<
998 is_field<field_component<T,M> >,
999 field_component<T,M>,
1002 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1003 ::impl<const field_component<T,M>&,
const int&>::result_type
const
1007 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1008 ::impl<const field_component<T,M>&,
const int&>() (l, r);
1010 #else // BOOST_VERSION >= 104601
1011 typename boost::proto::detail::enable_binary<
1013 field_domain::proto_grammar,
1015 boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
1018 boost::proto::is_extension<field_component<T,M> >,
1019 boost::proto::is_extension<int >
1023 boost::proto::tag::plus,
1024 field_component<T,M>
const &,
1027 operator+ (field_component<T,M>
const &left,
int const &right)
1029 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M>
const &,
int const &>()(left, right);
1031 #endif // BOOST_VERSION
1032 template<
class T,
class M>
1033 #if BOOST_VERSION < 104601
1035 boost::proto::detail::enable_binary<
1037 is_field<field_component<T,M> >,
1038 field_component<T,M>,
1041 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1042 ::impl<const field_component<T,M>&,
const T&>::result_type
const
1046 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1047 ::impl<const field_component<T,M>&,
const T&>() (l, r);
1049 #else // BOOST_VERSION >= 104601
1050 typename boost::proto::detail::enable_binary<
1052 field_domain::proto_grammar,
1054 boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
1057 boost::proto::is_extension<field_component<T,M> >,
1058 boost::proto::is_extension<T >
1062 boost::proto::tag::plus,
1063 field_component<T,M>
const &,
1066 operator+ (field_component<T,M>
const &left, T
const &right)
1068 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M>
const &, T
const &>()(left, right);
1070 #endif // BOOST_VERSION
1071 template<
class T,
class M>
1072 #if BOOST_VERSION < 104601
1074 boost::proto::detail::enable_binary<
1076 is_field<field_component_const<T,M> >,
1077 field_component_const<T,M>,
1080 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1081 ::impl<const field_component_const<T,M>&,
const int&>::result_type
const
1085 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1086 ::impl<const field_component_const<T,M>&,
const int&>() (l, r);
1088 #else // BOOST_VERSION >= 104601
1089 typename boost::proto::detail::enable_binary<
1091 field_domain::proto_grammar,
1093 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
1096 boost::proto::is_extension<field_component_const<T,M> >,
1097 boost::proto::is_extension<int >
1101 boost::proto::tag::plus,
1102 field_component_const<T,M>
const &,
1105 operator+ (field_component_const<T,M>
const &left,
int const &right)
1107 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M>
const &,
int const &>()(left, right);
1109 #endif // BOOST_VERSION
1110 template<
class T,
class M>
1111 #if BOOST_VERSION < 104601
1113 boost::proto::detail::enable_binary<
1115 is_field<field_component_const<T,M> >,
1116 field_component_const<T,M>,
1119 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1120 ::impl<const field_component_const<T,M>&,
const T&>::result_type
const
1124 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1125 ::impl<const field_component_const<T,M>&,
const T&>() (l, r);
1127 #else // BOOST_VERSION >= 104601
1128 typename boost::proto::detail::enable_binary<
1130 field_domain::proto_grammar,
1132 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
1135 boost::proto::is_extension<field_component_const<T,M> >,
1136 boost::proto::is_extension<T >
1140 boost::proto::tag::plus,
1141 field_component_const<T,M>
const &,
1144 operator+ (field_component_const<T,M>
const &left, T
const &right)
1146 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M>
const &, T
const &>()(left, right);
1148 #endif // BOOST_VERSION
1149 template<
class Expr>
1150 #if BOOST_VERSION < 104601
1152 boost::proto::detail::enable_binary<
1156 is_field<field_expr<Expr> >,
1158 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1159 ::impl<const int&, const field_expr<Expr>&>::result_type
const
1163 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1164 ::impl<const int&, const field_expr<Expr>&>() (l, r);
1166 #else // BOOST_VERSION >= 104601
1167 typename boost::proto::detail::enable_binary<
1169 field_domain::proto_grammar,
1171 boost::mpl::or_<is_field<int >, is_field<field_expr<Expr> > >,
1174 boost::proto::is_extension<int >,
1175 boost::proto::is_extension<field_expr<Expr> >
1179 boost::proto::tag::plus,
1181 field_expr<Expr>
const &
1183 operator+ (
int const &left, field_expr<Expr>
const &right)
1185 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, int const &, field_expr<Expr>
const &>()(left, right);
1187 #endif // BOOST_VERSION
1188 template<
class Expr>
1189 #if BOOST_VERSION < 104601
1191 boost::proto::detail::enable_binary<
1193 is_field<field_expr<Expr> >,
1197 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1198 ::impl<const field_expr<Expr>&,
const int&>::result_type
const
1202 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1203 ::impl<const field_expr<Expr>&,
const int&>() (l, r);
1205 #else // BOOST_VERSION >= 104601
1206 typename boost::proto::detail::enable_binary<
1208 field_domain::proto_grammar,
1210 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<int > >,
1213 boost::proto::is_extension<field_expr<Expr> >,
1214 boost::proto::is_extension<int >
1218 boost::proto::tag::plus,
1219 field_expr<Expr>
const &,
1222 operator+ (field_expr<Expr>
const &left,
int const &right)
1224 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &,
int const &>()(left, right);
1226 #endif // BOOST_VERSION
1227 template<
class T,
class Expr>
1228 #if BOOST_VERSION < 104601
1230 boost::proto::detail::enable_binary<
1234 is_field<field_expr<Expr> >,
1236 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1237 ::impl<const T&, const field_expr<Expr>&>::result_type
const
1241 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1242 ::impl<const T&, const field_expr<Expr>&>() (l, r);
1244 #else // BOOST_VERSION >= 104601
1245 typename boost::proto::detail::enable_binary<
1247 field_domain::proto_grammar,
1249 boost::mpl::or_<is_field<T >, is_field<field_expr<Expr> > >,
1252 boost::proto::is_extension<T >,
1253 boost::proto::is_extension<field_expr<Expr> >
1257 boost::proto::tag::plus,
1259 field_expr<Expr>
const &
1261 operator+ (T
const &left, field_expr<Expr>
const &right)
1263 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, T const &, field_expr<Expr>
const &>()(left, right);
1265 #endif // BOOST_VERSION
1266 template<
class T,
class Expr>
1267 #if BOOST_VERSION < 104601
1269 boost::proto::detail::enable_binary<
1271 is_field<field_expr<Expr> >,
1275 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1276 ::impl<const field_expr<Expr>&,
const T&>::result_type
const
1280 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1281 ::impl<const field_expr<Expr>&,
const T&>() (l, r);
1283 #else // BOOST_VERSION >= 104601
1284 typename boost::proto::detail::enable_binary<
1286 field_domain::proto_grammar,
1288 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<T > >,
1291 boost::proto::is_extension<field_expr<Expr> >,
1292 boost::proto::is_extension<T >
1296 boost::proto::tag::plus,
1297 field_expr<Expr>
const &,
1300 operator+ (field_expr<Expr>
const &left, T
const &right)
1302 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, T
const &>()(left, right);
1304 #endif // BOOST_VERSION
1305 template<
class T1,
class T2,
class M>
1306 #if BOOST_VERSION < 104601
1308 boost::proto::detail::enable_binary<
1310 is_field<field_basic<T1,M> >,
1312 is_field<field_basic<T2,M> >,
1314 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1315 ::impl<const field_basic<T1,M>&,
const field_basic<T2,M>&>::result_type
const
1319 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1322 #else // BOOST_VERSION >= 104601
1323 typename boost::proto::detail::enable_binary<
1325 field_domain::proto_grammar,
1327 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_basic<T2,M> > >,
1330 boost::proto::is_extension<field_basic<T1,M> >,
1331 boost::proto::is_extension<field_basic<T2,M> >
1335 boost::proto::tag::plus,
1336 field_basic<T1,M>
const &,
1337 field_basic<T2,M>
const &
1339 operator+ (field_basic<T1,M>
const &left, field_basic<T2,M>
const &right)
1341 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
1343 #endif // BOOST_VERSION
1344 template<
class T1,
class T2,
class M>
1345 #if BOOST_VERSION < 104601
1347 boost::proto::detail::enable_binary<
1349 is_field<field_basic<T1,M> >,
1351 is_field<field_indirect<T2,M> >,
1352 field_indirect<T2,M>,
1353 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1354 ::impl<const field_basic<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
1358 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1361 #else // BOOST_VERSION >= 104601
1362 typename boost::proto::detail::enable_binary<
1364 field_domain::proto_grammar,
1366 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect<T2,M> > >,
1369 boost::proto::is_extension<field_basic<T1,M> >,
1370 boost::proto::is_extension<field_indirect<T2,M> >
1374 boost::proto::tag::plus,
1375 field_basic<T1,M>
const &,
1376 field_indirect<T2,M>
const &
1378 operator+ (field_basic<T1,M>
const &left, field_indirect<T2,M>
const &right)
1380 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
1382 #endif // BOOST_VERSION
1383 template<
class T1,
class T2,
class M>
1384 #if BOOST_VERSION < 104601
1386 boost::proto::detail::enable_binary<
1388 is_field<field_basic<T1,M> >,
1390 is_field<field_indirect_const<T2,M> >,
1391 field_indirect_const<T2,M>,
1392 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1393 ::impl<const field_basic<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
1397 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1400 #else // BOOST_VERSION >= 104601
1401 typename boost::proto::detail::enable_binary<
1403 field_domain::proto_grammar,
1405 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1408 boost::proto::is_extension<field_basic<T1,M> >,
1409 boost::proto::is_extension<field_indirect_const<T2,M> >
1413 boost::proto::tag::plus,
1414 field_basic<T1,M>
const &,
1415 field_indirect_const<T2,M>
const &
1417 operator+ (field_basic<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
1419 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);
1421 #endif // BOOST_VERSION
1422 template<
class T1,
class T2,
class M>
1423 #if BOOST_VERSION < 104601
1425 boost::proto::detail::enable_binary<
1427 is_field<field_basic<T1,M> >,
1429 is_field<field_component<T2,M> >,
1430 field_component<T2,M>,
1431 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1432 ::impl<const field_basic<T1,M>&,
const field_component<T2,M>&>::result_type
const
1436 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1439 #else // BOOST_VERSION >= 104601
1440 typename boost::proto::detail::enable_binary<
1442 field_domain::proto_grammar,
1444 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
1447 boost::proto::is_extension<field_basic<T1,M> >,
1448 boost::proto::is_extension<field_component<T2,M> >
1452 boost::proto::tag::plus,
1453 field_basic<T1,M>
const &,
1454 field_component<T2,M>
const &
1456 operator+ (field_basic<T1,M>
const &left, field_component<T2,M>
const &right)
1458 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
1460 #endif // BOOST_VERSION
1461 template<
class T1,
class T2,
class M>
1462 #if BOOST_VERSION < 104601
1464 boost::proto::detail::enable_binary<
1466 is_field<field_basic<T1,M> >,
1468 is_field<field_component_const<T2,M> >,
1469 field_component_const<T2,M>,
1470 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1471 ::impl<const field_basic<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
1475 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1478 #else // BOOST_VERSION >= 104601
1479 typename boost::proto::detail::enable_binary<
1481 field_domain::proto_grammar,
1483 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
1486 boost::proto::is_extension<field_basic<T1,M> >,
1487 boost::proto::is_extension<field_component_const<T2,M> >
1491 boost::proto::tag::plus,
1492 field_basic<T1,M>
const &,
1493 field_component_const<T2,M>
const &
1495 operator+ (field_basic<T1,M>
const &left, field_component_const<T2,M>
const &right)
1497 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);
1499 #endif // BOOST_VERSION
1500 template<
class T1,
class T2,
class M>
1501 #if BOOST_VERSION < 104601
1503 boost::proto::detail::enable_binary<
1505 is_field<field_indirect<T1,M> >,
1506 field_indirect<T1,M>,
1507 is_field<field_basic<T2,M> >,
1509 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1510 ::impl<const field_indirect<T1,M>&,
const field_basic<T2,M>&>::result_type
const
1514 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1517 #else // BOOST_VERSION >= 104601
1518 typename boost::proto::detail::enable_binary<
1520 field_domain::proto_grammar,
1522 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_basic<T2,M> > >,
1525 boost::proto::is_extension<field_indirect<T1,M> >,
1526 boost::proto::is_extension<field_basic<T2,M> >
1530 boost::proto::tag::plus,
1531 field_indirect<T1,M>
const &,
1532 field_basic<T2,M>
const &
1534 operator+ (field_indirect<T1,M>
const &left, field_basic<T2,M>
const &right)
1536 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
1538 #endif // BOOST_VERSION
1539 template<
class T1,
class T2,
class M>
1540 #if BOOST_VERSION < 104601
1542 boost::proto::detail::enable_binary<
1544 is_field<field_indirect<T1,M> >,
1545 field_indirect<T1,M>,
1546 is_field<field_indirect<T2,M> >,
1547 field_indirect<T2,M>,
1548 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1549 ::impl<const field_indirect<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
1553 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1556 #else // BOOST_VERSION >= 104601
1557 typename boost::proto::detail::enable_binary<
1559 field_domain::proto_grammar,
1561 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect<T2,M> > >,
1564 boost::proto::is_extension<field_indirect<T1,M> >,
1565 boost::proto::is_extension<field_indirect<T2,M> >
1569 boost::proto::tag::plus,
1570 field_indirect<T1,M>
const &,
1571 field_indirect<T2,M>
const &
1573 operator+ (field_indirect<T1,M>
const &left, field_indirect<T2,M>
const &right)
1575 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
1577 #endif // BOOST_VERSION
1578 template<
class T1,
class T2,
class M>
1579 #if BOOST_VERSION < 104601
1581 boost::proto::detail::enable_binary<
1583 is_field<field_indirect<T1,M> >,
1584 field_indirect<T1,M>,
1585 is_field<field_indirect_const<T2,M> >,
1586 field_indirect_const<T2,M>,
1587 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1588 ::impl<const field_indirect<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
1592 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1595 #else // BOOST_VERSION >= 104601
1596 typename boost::proto::detail::enable_binary<
1598 field_domain::proto_grammar,
1600 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1603 boost::proto::is_extension<field_indirect<T1,M> >,
1604 boost::proto::is_extension<field_indirect_const<T2,M> >
1608 boost::proto::tag::plus,
1609 field_indirect<T1,M>
const &,
1610 field_indirect_const<T2,M>
const &
1612 operator+ (field_indirect<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
1614 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);
1616 #endif // BOOST_VERSION
1617 template<
class T1,
class T2,
class M>
1618 #if BOOST_VERSION < 104601
1620 boost::proto::detail::enable_binary<
1622 is_field<field_indirect<T1,M> >,
1623 field_indirect<T1,M>,
1624 is_field<field_component<T2,M> >,
1625 field_component<T2,M>,
1626 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1627 ::impl<const field_indirect<T1,M>&,
const field_component<T2,M>&>::result_type
const
1631 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1634 #else // BOOST_VERSION >= 104601
1635 typename boost::proto::detail::enable_binary<
1637 field_domain::proto_grammar,
1639 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
1642 boost::proto::is_extension<field_indirect<T1,M> >,
1643 boost::proto::is_extension<field_component<T2,M> >
1647 boost::proto::tag::plus,
1648 field_indirect<T1,M>
const &,
1649 field_component<T2,M>
const &
1651 operator+ (field_indirect<T1,M>
const &left, field_component<T2,M>
const &right)
1653 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
1655 #endif // BOOST_VERSION
1656 template<
class T1,
class T2,
class M>
1657 #if BOOST_VERSION < 104601
1659 boost::proto::detail::enable_binary<
1661 is_field<field_indirect<T1,M> >,
1662 field_indirect<T1,M>,
1663 is_field<field_component_const<T2,M> >,
1664 field_component_const<T2,M>,
1665 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1666 ::impl<const field_indirect<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
1670 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1673 #else // BOOST_VERSION >= 104601
1674 typename boost::proto::detail::enable_binary<
1676 field_domain::proto_grammar,
1678 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
1681 boost::proto::is_extension<field_indirect<T1,M> >,
1682 boost::proto::is_extension<field_component_const<T2,M> >
1686 boost::proto::tag::plus,
1687 field_indirect<T1,M>
const &,
1688 field_component_const<T2,M>
const &
1690 operator+ (field_indirect<T1,M>
const &left, field_component_const<T2,M>
const &right)
1692 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);
1694 #endif // BOOST_VERSION
1695 template<
class T1,
class T2,
class M>
1696 #if BOOST_VERSION < 104601
1698 boost::proto::detail::enable_binary<
1700 is_field<field_indirect_const<T1,M> >,
1701 field_indirect_const<T1,M>,
1702 is_field<field_basic<T2,M> >,
1704 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1705 ::impl<const field_indirect_const<T1,M>&,
const field_basic<T2,M>&>::result_type
const
1709 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1712 #else // BOOST_VERSION >= 104601
1713 typename boost::proto::detail::enable_binary<
1715 field_domain::proto_grammar,
1717 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_basic<T2,M> > >,
1720 boost::proto::is_extension<field_indirect_const<T1,M> >,
1721 boost::proto::is_extension<field_basic<T2,M> >
1725 boost::proto::tag::plus,
1726 field_indirect_const<T1,M>
const &,
1727 field_basic<T2,M>
const &
1729 operator+ (field_indirect_const<T1,M>
const &left, field_basic<T2,M>
const &right)
1731 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
1733 #endif // BOOST_VERSION
1734 template<
class T1,
class T2,
class M>
1735 #if BOOST_VERSION < 104601
1737 boost::proto::detail::enable_binary<
1739 is_field<field_indirect_const<T1,M> >,
1740 field_indirect_const<T1,M>,
1741 is_field<field_indirect<T2,M> >,
1742 field_indirect<T2,M>,
1743 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1744 ::impl<const field_indirect_const<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
1748 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1751 #else // BOOST_VERSION >= 104601
1752 typename boost::proto::detail::enable_binary<
1754 field_domain::proto_grammar,
1756 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect<T2,M> > >,
1759 boost::proto::is_extension<field_indirect_const<T1,M> >,
1760 boost::proto::is_extension<field_indirect<T2,M> >
1764 boost::proto::tag::plus,
1765 field_indirect_const<T1,M>
const &,
1766 field_indirect<T2,M>
const &
1768 operator+ (field_indirect_const<T1,M>
const &left, field_indirect<T2,M>
const &right)
1770 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
1772 #endif // BOOST_VERSION
1773 template<
class T1,
class T2,
class M>
1774 #if BOOST_VERSION < 104601
1776 boost::proto::detail::enable_binary<
1778 is_field<field_indirect_const<T1,M> >,
1779 field_indirect_const<T1,M>,
1780 is_field<field_indirect_const<T2,M> >,
1781 field_indirect_const<T2,M>,
1782 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1783 ::impl<const field_indirect_const<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
1787 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1790 #else // BOOST_VERSION >= 104601
1791 typename boost::proto::detail::enable_binary<
1793 field_domain::proto_grammar,
1795 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1798 boost::proto::is_extension<field_indirect_const<T1,M> >,
1799 boost::proto::is_extension<field_indirect_const<T2,M> >
1803 boost::proto::tag::plus,
1804 field_indirect_const<T1,M>
const &,
1805 field_indirect_const<T2,M>
const &
1807 operator+ (field_indirect_const<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
1809 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);
1811 #endif // BOOST_VERSION
1812 template<
class T1,
class T2,
class M>
1813 #if BOOST_VERSION < 104601
1815 boost::proto::detail::enable_binary<
1817 is_field<field_indirect_const<T1,M> >,
1818 field_indirect_const<T1,M>,
1819 is_field<field_component<T2,M> >,
1820 field_component<T2,M>,
1821 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1822 ::impl<const field_indirect_const<T1,M>&,
const field_component<T2,M>&>::result_type
const
1826 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1829 #else // BOOST_VERSION >= 104601
1830 typename boost::proto::detail::enable_binary<
1832 field_domain::proto_grammar,
1834 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
1837 boost::proto::is_extension<field_indirect_const<T1,M> >,
1838 boost::proto::is_extension<field_component<T2,M> >
1842 boost::proto::tag::plus,
1843 field_indirect_const<T1,M>
const &,
1844 field_component<T2,M>
const &
1846 operator+ (field_indirect_const<T1,M>
const &left, field_component<T2,M>
const &right)
1848 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);
1850 #endif // BOOST_VERSION
1851 template<
class T1,
class T2,
class M>
1852 #if BOOST_VERSION < 104601
1854 boost::proto::detail::enable_binary<
1856 is_field<field_indirect_const<T1,M> >,
1857 field_indirect_const<T1,M>,
1858 is_field<field_component_const<T2,M> >,
1859 field_component_const<T2,M>,
1860 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1861 ::impl<const field_indirect_const<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
1865 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1868 #else // BOOST_VERSION >= 104601
1869 typename boost::proto::detail::enable_binary<
1871 field_domain::proto_grammar,
1873 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
1876 boost::proto::is_extension<field_indirect_const<T1,M> >,
1877 boost::proto::is_extension<field_component_const<T2,M> >
1881 boost::proto::tag::plus,
1882 field_indirect_const<T1,M>
const &,
1883 field_component_const<T2,M>
const &
1885 operator+ (field_indirect_const<T1,M>
const &left, field_component_const<T2,M>
const &right)
1887 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);
1889 #endif // BOOST_VERSION
1890 template<
class T1,
class T2,
class M>
1891 #if BOOST_VERSION < 104601
1893 boost::proto::detail::enable_binary<
1895 is_field<field_component<T1,M> >,
1896 field_component<T1,M>,
1897 is_field<field_basic<T2,M> >,
1899 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1900 ::impl<const field_component<T1,M>&,
const field_basic<T2,M>&>::result_type
const
1904 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1907 #else // BOOST_VERSION >= 104601
1908 typename boost::proto::detail::enable_binary<
1910 field_domain::proto_grammar,
1912 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
1915 boost::proto::is_extension<field_component<T1,M> >,
1916 boost::proto::is_extension<field_basic<T2,M> >
1920 boost::proto::tag::plus,
1921 field_component<T1,M>
const &,
1922 field_basic<T2,M>
const &
1924 operator+ (field_component<T1,M>
const &left, field_basic<T2,M>
const &right)
1926 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
1928 #endif // BOOST_VERSION
1929 template<
class T1,
class T2,
class M>
1930 #if BOOST_VERSION < 104601
1932 boost::proto::detail::enable_binary<
1934 is_field<field_component<T1,M> >,
1935 field_component<T1,M>,
1936 is_field<field_indirect<T2,M> >,
1937 field_indirect<T2,M>,
1938 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1939 ::impl<const field_component<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
1943 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1946 #else // BOOST_VERSION >= 104601
1947 typename boost::proto::detail::enable_binary<
1949 field_domain::proto_grammar,
1951 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
1954 boost::proto::is_extension<field_component<T1,M> >,
1955 boost::proto::is_extension<field_indirect<T2,M> >
1959 boost::proto::tag::plus,
1960 field_component<T1,M>
const &,
1961 field_indirect<T2,M>
const &
1963 operator+ (field_component<T1,M>
const &left, field_indirect<T2,M>
const &right)
1965 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
1967 #endif // BOOST_VERSION
1968 template<
class T1,
class T2,
class M>
1969 #if BOOST_VERSION < 104601
1971 boost::proto::detail::enable_binary<
1973 is_field<field_component<T1,M> >,
1974 field_component<T1,M>,
1975 is_field<field_indirect_const<T2,M> >,
1976 field_indirect_const<T2,M>,
1977 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1978 ::impl<const field_component<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
1982 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
1985 #else // BOOST_VERSION >= 104601
1986 typename boost::proto::detail::enable_binary<
1988 field_domain::proto_grammar,
1990 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
1993 boost::proto::is_extension<field_component<T1,M> >,
1994 boost::proto::is_extension<field_indirect_const<T2,M> >
1998 boost::proto::tag::plus,
1999 field_component<T1,M>
const &,
2000 field_indirect_const<T2,M>
const &
2002 operator+ (field_component<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
2004 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);
2006 #endif // BOOST_VERSION
2007 template<
class T1,
class T2,
class M>
2008 #if BOOST_VERSION < 104601
2010 boost::proto::detail::enable_binary<
2012 is_field<field_component<T1,M> >,
2013 field_component<T1,M>,
2014 is_field<field_component<T2,M> >,
2015 field_component<T2,M>,
2016 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2017 ::impl<const field_component<T1,M>&,
const field_component<T2,M>&>::result_type
const
2021 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2024 #else // BOOST_VERSION >= 104601
2025 typename boost::proto::detail::enable_binary<
2027 field_domain::proto_grammar,
2029 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
2032 boost::proto::is_extension<field_component<T1,M> >,
2033 boost::proto::is_extension<field_component<T2,M> >
2037 boost::proto::tag::plus,
2038 field_component<T1,M>
const &,
2039 field_component<T2,M>
const &
2041 operator+ (field_component<T1,M>
const &left, field_component<T2,M>
const &right)
2043 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
2045 #endif // BOOST_VERSION
2046 template<
class T1,
class T2,
class M>
2047 #if BOOST_VERSION < 104601
2049 boost::proto::detail::enable_binary<
2051 is_field<field_component<T1,M> >,
2052 field_component<T1,M>,
2053 is_field<field_component_const<T2,M> >,
2054 field_component_const<T2,M>,
2055 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2056 ::impl<const field_component<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
2060 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2063 #else // BOOST_VERSION >= 104601
2064 typename boost::proto::detail::enable_binary<
2066 field_domain::proto_grammar,
2068 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
2071 boost::proto::is_extension<field_component<T1,M> >,
2072 boost::proto::is_extension<field_component_const<T2,M> >
2076 boost::proto::tag::plus,
2077 field_component<T1,M>
const &,
2078 field_component_const<T2,M>
const &
2080 operator+ (field_component<T1,M>
const &left, field_component_const<T2,M>
const &right)
2082 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);
2084 #endif // BOOST_VERSION
2085 template<
class T1,
class T2,
class M>
2086 #if BOOST_VERSION < 104601
2088 boost::proto::detail::enable_binary<
2090 is_field<field_component_const<T1,M> >,
2091 field_component_const<T1,M>,
2092 is_field<field_basic<T2,M> >,
2094 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2095 ::impl<const field_component_const<T1,M>&,
const field_basic<T2,M>&>::result_type
const
2099 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2102 #else // BOOST_VERSION >= 104601
2103 typename boost::proto::detail::enable_binary<
2105 field_domain::proto_grammar,
2107 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
2110 boost::proto::is_extension<field_component_const<T1,M> >,
2111 boost::proto::is_extension<field_basic<T2,M> >
2115 boost::proto::tag::plus,
2116 field_component_const<T1,M>
const &,
2117 field_basic<T2,M>
const &
2119 operator+ (field_component_const<T1,M>
const &left, field_basic<T2,M>
const &right)
2121 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);
2123 #endif // BOOST_VERSION
2124 template<
class T1,
class T2,
class M>
2125 #if BOOST_VERSION < 104601
2127 boost::proto::detail::enable_binary<
2129 is_field<field_component_const<T1,M> >,
2130 field_component_const<T1,M>,
2131 is_field<field_indirect<T2,M> >,
2132 field_indirect<T2,M>,
2133 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2134 ::impl<const field_component_const<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
2138 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2141 #else // BOOST_VERSION >= 104601
2142 typename boost::proto::detail::enable_binary<
2144 field_domain::proto_grammar,
2146 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
2149 boost::proto::is_extension<field_component_const<T1,M> >,
2150 boost::proto::is_extension<field_indirect<T2,M> >
2154 boost::proto::tag::plus,
2155 field_component_const<T1,M>
const &,
2156 field_indirect<T2,M>
const &
2158 operator+ (field_component_const<T1,M>
const &left, field_indirect<T2,M>
const &right)
2160 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);
2162 #endif // BOOST_VERSION
2163 template<
class T1,
class T2,
class M>
2164 #if BOOST_VERSION < 104601
2166 boost::proto::detail::enable_binary<
2168 is_field<field_component_const<T1,M> >,
2169 field_component_const<T1,M>,
2170 is_field<field_indirect_const<T2,M> >,
2171 field_indirect_const<T2,M>,
2172 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2173 ::impl<const field_component_const<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
2177 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2180 #else // BOOST_VERSION >= 104601
2181 typename boost::proto::detail::enable_binary<
2183 field_domain::proto_grammar,
2185 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
2188 boost::proto::is_extension<field_component_const<T1,M> >,
2189 boost::proto::is_extension<field_indirect_const<T2,M> >
2193 boost::proto::tag::plus,
2194 field_component_const<T1,M>
const &,
2195 field_indirect_const<T2,M>
const &
2197 operator+ (field_component_const<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
2199 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);
2201 #endif // BOOST_VERSION
2202 template<
class T1,
class T2,
class M>
2203 #if BOOST_VERSION < 104601
2205 boost::proto::detail::enable_binary<
2207 is_field<field_component_const<T1,M> >,
2208 field_component_const<T1,M>,
2209 is_field<field_component<T2,M> >,
2210 field_component<T2,M>,
2211 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2212 ::impl<const field_component_const<T1,M>&,
const field_component<T2,M>&>::result_type
const
2216 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2219 #else // BOOST_VERSION >= 104601
2220 typename boost::proto::detail::enable_binary<
2222 field_domain::proto_grammar,
2224 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
2227 boost::proto::is_extension<field_component_const<T1,M> >,
2228 boost::proto::is_extension<field_component<T2,M> >
2232 boost::proto::tag::plus,
2233 field_component_const<T1,M>
const &,
2234 field_component<T2,M>
const &
2236 operator+ (field_component_const<T1,M>
const &left, field_component<T2,M>
const &right)
2238 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);
2240 #endif // BOOST_VERSION
2241 template<
class T1,
class T2,
class M>
2242 #if BOOST_VERSION < 104601
2244 boost::proto::detail::enable_binary<
2246 is_field<field_component_const<T1,M> >,
2247 field_component_const<T1,M>,
2248 is_field<field_component_const<T2,M> >,
2249 field_component_const<T2,M>,
2250 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2251 ::impl<const field_component_const<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
2255 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2258 #else // BOOST_VERSION >= 104601
2259 typename boost::proto::detail::enable_binary<
2261 field_domain::proto_grammar,
2263 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
2266 boost::proto::is_extension<field_component_const<T1,M> >,
2267 boost::proto::is_extension<field_component_const<T2,M> >
2271 boost::proto::tag::plus,
2272 field_component_const<T1,M>
const &,
2273 field_component_const<T2,M>
const &
2275 operator+ (field_component_const<T1,M>
const &left, field_component_const<T2,M>
const &right)
2277 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);
2279 #endif // BOOST_VERSION
2280 template<
class T,
class M,
class Expr>
2281 #if BOOST_VERSION < 104601
2283 boost::proto::detail::enable_binary<
2285 is_field<field_basic<T,M> >,
2287 is_field<field_expr<Expr> >,
2289 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2290 ::impl<const field_basic<T,M>&,
const field_expr<Expr>&>::result_type
const
2294 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2297 #else // BOOST_VERSION >= 104601
2298 typename boost::proto::detail::enable_binary<
2300 field_domain::proto_grammar,
2302 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<field_expr<Expr> > >,
2305 boost::proto::is_extension<field_basic<T,M> >,
2306 boost::proto::is_extension<field_expr<Expr> >
2310 boost::proto::tag::plus,
2311 field_basic<T,M>
const &,
2312 field_expr<Expr>
const &
2314 operator+ (field_basic<T,M>
const &left, field_expr<Expr>
const &right)
2316 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_basic<T,M>
const &, field_expr<Expr>
const &>()(left, right);
2318 #endif // BOOST_VERSION
2319 template<
class T,
class M,
class Expr>
2320 #if BOOST_VERSION < 104601
2322 boost::proto::detail::enable_binary<
2324 is_field<field_expr<Expr> >,
2326 is_field<field_basic<T,M> >,
2328 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2329 ::impl<const field_expr<Expr>&,
const field_basic<T,M>&>::result_type
const
2333 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2336 #else // BOOST_VERSION >= 104601
2337 typename boost::proto::detail::enable_binary<
2339 field_domain::proto_grammar,
2341 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_basic<T,M> > >,
2344 boost::proto::is_extension<field_expr<Expr> >,
2345 boost::proto::is_extension<field_basic<T,M> >
2349 boost::proto::tag::plus,
2350 field_expr<Expr>
const &,
2351 field_basic<T,M>
const &
2353 operator+ (field_expr<Expr>
const &left, field_basic<T,M>
const &right)
2355 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, field_basic<T,M>
const &>()(left, right);
2357 #endif // BOOST_VERSION
2358 template<
class T,
class M,
class Expr>
2359 #if BOOST_VERSION < 104601
2361 boost::proto::detail::enable_binary<
2363 is_field<field_indirect<T,M> >,
2364 field_indirect<T,M>,
2365 is_field<field_expr<Expr> >,
2367 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2368 ::impl<const field_indirect<T,M>&,
const field_expr<Expr>&>::result_type
const
2372 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2375 #else // BOOST_VERSION >= 104601
2376 typename boost::proto::detail::enable_binary<
2378 field_domain::proto_grammar,
2380 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<field_expr<Expr> > >,
2383 boost::proto::is_extension<field_indirect<T,M> >,
2384 boost::proto::is_extension<field_expr<Expr> >
2388 boost::proto::tag::plus,
2389 field_indirect<T,M>
const &,
2390 field_expr<Expr>
const &
2392 operator+ (field_indirect<T,M>
const &left, field_expr<Expr>
const &right)
2394 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect<T,M>
const &, field_expr<Expr>
const &>()(left, right);
2396 #endif // BOOST_VERSION
2397 template<
class T,
class M,
class Expr>
2398 #if BOOST_VERSION < 104601
2400 boost::proto::detail::enable_binary<
2402 is_field<field_expr<Expr> >,
2404 is_field<field_indirect<T,M> >,
2405 field_indirect<T,M>,
2406 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2407 ::impl<const field_expr<Expr>&,
const field_indirect<T,M>&>::result_type
const
2411 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2414 #else // BOOST_VERSION >= 104601
2415 typename boost::proto::detail::enable_binary<
2417 field_domain::proto_grammar,
2419 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect<T,M> > >,
2422 boost::proto::is_extension<field_expr<Expr> >,
2423 boost::proto::is_extension<field_indirect<T,M> >
2427 boost::proto::tag::plus,
2428 field_expr<Expr>
const &,
2429 field_indirect<T,M>
const &
2431 operator+ (field_expr<Expr>
const &left, field_indirect<T,M>
const &right)
2433 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, field_indirect<T,M>
const &>()(left, right);
2435 #endif // BOOST_VERSION
2436 template<
class T,
class M,
class Expr>
2437 #if BOOST_VERSION < 104601
2439 boost::proto::detail::enable_binary<
2441 is_field<field_indirect_const<T,M> >,
2442 field_indirect_const<T,M>,
2443 is_field<field_expr<Expr> >,
2445 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2446 ::impl<const field_indirect_const<T,M>&,
const field_expr<Expr>&>::result_type
const
2450 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2451 ::impl<const field_indirect_const<T,M>&,
const field_expr<Expr>&>() (l, r);
2453 #else // BOOST_VERSION >= 104601
2454 typename boost::proto::detail::enable_binary<
2456 field_domain::proto_grammar,
2458 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<field_expr<Expr> > >,
2461 boost::proto::is_extension<field_indirect_const<T,M> >,
2462 boost::proto::is_extension<field_expr<Expr> >
2466 boost::proto::tag::plus,
2467 field_indirect_const<T,M>
const &,
2468 field_expr<Expr>
const &
2470 operator+ (field_indirect_const<T,M>
const &left, field_expr<Expr>
const &right)
2472 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_indirect_const<T,M>
const &, field_expr<Expr>
const &>()(left, right);
2474 #endif // BOOST_VERSION
2475 template<
class T,
class M,
class Expr>
2476 #if BOOST_VERSION < 104601
2478 boost::proto::detail::enable_binary<
2480 is_field<field_expr<Expr> >,
2482 is_field<field_indirect_const<T,M> >,
2483 field_indirect_const<T,M>,
2484 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2485 ::impl<const field_expr<Expr>&,
const field_indirect_const<T,M>&>::result_type
const
2489 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2492 #else // BOOST_VERSION >= 104601
2493 typename boost::proto::detail::enable_binary<
2495 field_domain::proto_grammar,
2497 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
2500 boost::proto::is_extension<field_expr<Expr> >,
2501 boost::proto::is_extension<field_indirect_const<T,M> >
2505 boost::proto::tag::plus,
2506 field_expr<Expr>
const &,
2507 field_indirect_const<T,M>
const &
2509 operator+ (field_expr<Expr>
const &left, field_indirect_const<T,M>
const &right)
2511 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, field_indirect_const<T,M>
const &>()(left, right);
2513 #endif // BOOST_VERSION
2514 template<
class T,
class M,
class Expr>
2515 #if BOOST_VERSION < 104601
2517 boost::proto::detail::enable_binary<
2519 is_field<field_component<T,M> >,
2520 field_component<T,M>,
2521 is_field<field_expr<Expr> >,
2523 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2524 ::impl<const field_component<T,M>&,
const field_expr<Expr>&>::result_type
const
2528 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2531 #else // BOOST_VERSION >= 104601
2532 typename boost::proto::detail::enable_binary<
2534 field_domain::proto_grammar,
2536 boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
2539 boost::proto::is_extension<field_component<T,M> >,
2540 boost::proto::is_extension<field_expr<Expr> >
2544 boost::proto::tag::plus,
2545 field_component<T,M>
const &,
2546 field_expr<Expr>
const &
2548 operator+ (field_component<T,M>
const &left, field_expr<Expr>
const &right)
2550 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component<T,M>
const &, field_expr<Expr>
const &>()(left, right);
2552 #endif // BOOST_VERSION
2553 template<
class T,
class M,
class Expr>
2554 #if BOOST_VERSION < 104601
2556 boost::proto::detail::enable_binary<
2558 is_field<field_expr<Expr> >,
2560 is_field<field_component<T,M> >,
2561 field_component<T,M>,
2562 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2563 ::impl<const field_expr<Expr>&,
const field_component<T,M>&>::result_type
const
2567 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2570 #else // BOOST_VERSION >= 104601
2571 typename boost::proto::detail::enable_binary<
2573 field_domain::proto_grammar,
2575 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
2578 boost::proto::is_extension<field_expr<Expr> >,
2579 boost::proto::is_extension<field_component<T,M> >
2583 boost::proto::tag::plus,
2584 field_expr<Expr>
const &,
2585 field_component<T,M>
const &
2587 operator+ (field_expr<Expr>
const &left, field_component<T,M>
const &right)
2589 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, field_component<T,M>
const &>()(left, right);
2591 #endif // BOOST_VERSION
2592 template<
class T,
class M,
class Expr>
2593 #if BOOST_VERSION < 104601
2595 boost::proto::detail::enable_binary<
2597 is_field<field_component_const<T,M> >,
2598 field_component_const<T,M>,
2599 is_field<field_expr<Expr> >,
2601 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2602 ::impl<const field_component_const<T,M>&,
const field_expr<Expr>&>::result_type
const
2606 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2607 ::impl<const field_component_const<T,M>&,
const field_expr<Expr>&>() (l, r);
2609 #else // BOOST_VERSION >= 104601
2610 typename boost::proto::detail::enable_binary<
2612 field_domain::proto_grammar,
2614 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
2617 boost::proto::is_extension<field_component_const<T,M> >,
2618 boost::proto::is_extension<field_expr<Expr> >
2622 boost::proto::tag::plus,
2623 field_component_const<T,M>
const &,
2624 field_expr<Expr>
const &
2626 operator+ (field_component_const<T,M>
const &left, field_expr<Expr>
const &right)
2628 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_component_const<T,M>
const &, field_expr<Expr>
const &>()(left, right);
2630 #endif // BOOST_VERSION
2631 template<
class T,
class M,
class Expr>
2632 #if BOOST_VERSION < 104601
2634 boost::proto::detail::enable_binary<
2636 is_field<field_expr<Expr> >,
2638 is_field<field_component_const<T,M> >,
2639 field_component_const<T,M>,
2640 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2641 ::impl<const field_expr<Expr>&,
const field_component_const<T,M>&>::result_type
const
2645 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2648 #else // BOOST_VERSION >= 104601
2649 typename boost::proto::detail::enable_binary<
2651 field_domain::proto_grammar,
2653 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
2656 boost::proto::is_extension<field_expr<Expr> >,
2657 boost::proto::is_extension<field_component_const<T,M> >
2661 boost::proto::tag::plus,
2662 field_expr<Expr>
const &,
2663 field_component_const<T,M>
const &
2665 operator+ (field_expr<Expr>
const &left, field_component_const<T,M>
const &right)
2667 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr>
const &, field_component_const<T,M>
const &>()(left, right);
2669 #endif // BOOST_VERSION
2670 template<
class Expr1,
class Expr2>
2671 #if BOOST_VERSION < 104601
2673 boost::proto::detail::enable_binary<
2675 is_field<field_expr<Expr1> >,
2677 is_field<field_expr<Expr2> >,
2679 typename boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2680 ::impl<const field_expr<Expr1>&,
const field_expr<Expr2>&>::result_type
const
2684 return boost::proto::functional::make_expr<boost::proto::tag::plus, field_domain>
2687 #else // BOOST_VERSION >= 104601
2688 typename boost::proto::detail::enable_binary<
2690 field_domain::proto_grammar,
2692 boost::mpl::or_<is_field<field_expr<Expr1> >, is_field<field_expr<Expr2> > >,
2695 boost::proto::is_extension<field_expr<Expr1> >,
2696 boost::proto::is_extension<field_expr<Expr2> >
2700 boost::proto::tag::plus,
2701 field_expr<Expr1>
const &,
2702 field_expr<Expr2>
const &
2704 operator+ (field_expr<Expr1>
const &left, field_expr<Expr2>
const &right)
2706 return boost::proto::detail::make_expr_<boost::proto::tag::plus, field_domain, field_expr<Expr1>
const &, field_expr<Expr2>
const &>()(left, right);
2708 #endif // BOOST_VERSION
2709 template<
class T,
class M>
2710 #if BOOST_VERSION < 104601
2712 boost::proto::detail::enable_binary<
2716 is_field<field_basic<T,M> >,
2718 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2719 ::impl<const int&, const field_basic<T,M>&>::result_type
const
2723 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2724 ::impl<const int&, const field_basic<T,M>&>() (l, r);
2726 #else // BOOST_VERSION >= 104601
2727 typename boost::proto::detail::enable_binary<
2729 field_domain::proto_grammar,
2731 boost::mpl::or_<is_field<int >, is_field<field_basic<T,M> > >,
2734 boost::proto::is_extension<int >,
2735 boost::proto::is_extension<field_basic<T,M> >
2739 boost::proto::tag::minus,
2741 field_basic<T,M>
const &
2743 operator- (
int const &left, field_basic<T,M>
const &right)
2745 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_basic<T,M>
const &>()(left, right);
2747 #endif // BOOST_VERSION
2748 template<
class T,
class M>
2749 #if BOOST_VERSION < 104601
2751 boost::proto::detail::enable_binary<
2755 is_field<field_basic<T,M> >,
2757 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2758 ::impl<const T&, const field_basic<T,M>&>::result_type
const
2762 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2763 ::impl<const T&, const field_basic<T,M>&>() (l, r);
2765 #else // BOOST_VERSION >= 104601
2766 typename boost::proto::detail::enable_binary<
2768 field_domain::proto_grammar,
2770 boost::mpl::or_<is_field<T >, is_field<field_basic<T,M> > >,
2773 boost::proto::is_extension<T >,
2774 boost::proto::is_extension<field_basic<T,M> >
2778 boost::proto::tag::minus,
2780 field_basic<T,M>
const &
2782 operator- (T
const &left, field_basic<T,M>
const &right)
2784 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_basic<T,M>
const &>()(left, right);
2786 #endif // BOOST_VERSION
2787 template<
class T,
class M>
2788 #if BOOST_VERSION < 104601
2790 boost::proto::detail::enable_binary<
2794 is_field<field_indirect<T,M> >,
2795 field_indirect<T,M>,
2796 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2797 ::impl<const int&, const field_indirect<T,M>&>::result_type
const
2801 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2802 ::impl<const int&, const field_indirect<T,M>&>() (l, r);
2804 #else // BOOST_VERSION >= 104601
2805 typename boost::proto::detail::enable_binary<
2807 field_domain::proto_grammar,
2809 boost::mpl::or_<is_field<int >, is_field<field_indirect<T,M> > >,
2812 boost::proto::is_extension<int >,
2813 boost::proto::is_extension<field_indirect<T,M> >
2817 boost::proto::tag::minus,
2819 field_indirect<T,M>
const &
2821 operator- (
int const &left, field_indirect<T,M>
const &right)
2823 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_indirect<T,M>
const &>()(left, right);
2825 #endif // BOOST_VERSION
2826 template<
class T,
class M>
2827 #if BOOST_VERSION < 104601
2829 boost::proto::detail::enable_binary<
2833 is_field<field_indirect<T,M> >,
2834 field_indirect<T,M>,
2835 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2836 ::impl<const T&, const field_indirect<T,M>&>::result_type
const
2840 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2841 ::impl<const T&, const field_indirect<T,M>&>() (l, r);
2843 #else // BOOST_VERSION >= 104601
2844 typename boost::proto::detail::enable_binary<
2846 field_domain::proto_grammar,
2848 boost::mpl::or_<is_field<T >, is_field<field_indirect<T,M> > >,
2851 boost::proto::is_extension<T >,
2852 boost::proto::is_extension<field_indirect<T,M> >
2856 boost::proto::tag::minus,
2858 field_indirect<T,M>
const &
2860 operator- (T
const &left, field_indirect<T,M>
const &right)
2862 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_indirect<T,M>
const &>()(left, right);
2864 #endif // BOOST_VERSION
2865 template<
class T,
class M>
2866 #if BOOST_VERSION < 104601
2868 boost::proto::detail::enable_binary<
2872 is_field<field_indirect_const<T,M> >,
2873 field_indirect_const<T,M>,
2874 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2875 ::impl<const int&, const field_indirect_const<T,M>&>::result_type
const
2879 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2880 ::impl<const int&, const field_indirect_const<T,M>&>() (l, r);
2882 #else // BOOST_VERSION >= 104601
2883 typename boost::proto::detail::enable_binary<
2885 field_domain::proto_grammar,
2887 boost::mpl::or_<is_field<int >, is_field<field_indirect_const<T,M> > >,
2890 boost::proto::is_extension<int >,
2891 boost::proto::is_extension<field_indirect_const<T,M> >
2895 boost::proto::tag::minus,
2897 field_indirect_const<T,M>
const &
2899 operator- (
int const &left, field_indirect_const<T,M>
const &right)
2901 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_indirect_const<T,M>
const &>()(left, right);
2903 #endif // BOOST_VERSION
2904 template<
class T,
class M>
2905 #if BOOST_VERSION < 104601
2907 boost::proto::detail::enable_binary<
2911 is_field<field_indirect_const<T,M> >,
2912 field_indirect_const<T,M>,
2913 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2914 ::impl<const T&, const field_indirect_const<T,M>&>::result_type
const
2918 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2919 ::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
2921 #else // BOOST_VERSION >= 104601
2922 typename boost::proto::detail::enable_binary<
2924 field_domain::proto_grammar,
2926 boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
2929 boost::proto::is_extension<T >,
2930 boost::proto::is_extension<field_indirect_const<T,M> >
2934 boost::proto::tag::minus,
2936 field_indirect_const<T,M>
const &
2938 operator- (T
const &left, field_indirect_const<T,M>
const &right)
2940 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_indirect_const<T,M>
const &>()(left, right);
2942 #endif // BOOST_VERSION
2943 template<
class T,
class M>
2944 #if BOOST_VERSION < 104601
2946 boost::proto::detail::enable_binary<
2950 is_field<field_component<T,M> >,
2951 field_component<T,M>,
2952 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2953 ::impl<const int&, const field_component<T,M>&>::result_type
const
2957 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2958 ::impl<const int&, const field_component<T,M>&>() (l, r);
2960 #else // BOOST_VERSION >= 104601
2961 typename boost::proto::detail::enable_binary<
2963 field_domain::proto_grammar,
2965 boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
2968 boost::proto::is_extension<int >,
2969 boost::proto::is_extension<field_component<T,M> >
2973 boost::proto::tag::minus,
2975 field_component<T,M>
const &
2977 operator- (
int const &left, field_component<T,M>
const &right)
2979 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_component<T,M>
const &>()(left, right);
2981 #endif // BOOST_VERSION
2982 template<
class T,
class M>
2983 #if BOOST_VERSION < 104601
2985 boost::proto::detail::enable_binary<
2989 is_field<field_component<T,M> >,
2990 field_component<T,M>,
2991 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2992 ::impl<const T&, const field_component<T,M>&>::result_type
const
2996 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
2997 ::impl<const T&, const field_component<T,M>&>() (l, r);
2999 #else // BOOST_VERSION >= 104601
3000 typename boost::proto::detail::enable_binary<
3002 field_domain::proto_grammar,
3004 boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
3007 boost::proto::is_extension<T >,
3008 boost::proto::is_extension<field_component<T,M> >
3012 boost::proto::tag::minus,
3014 field_component<T,M>
const &
3016 operator- (T
const &left, field_component<T,M>
const &right)
3018 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_component<T,M>
const &>()(left, right);
3020 #endif // BOOST_VERSION
3021 template<
class T,
class M>
3022 #if BOOST_VERSION < 104601
3024 boost::proto::detail::enable_binary<
3028 is_field<field_component_const<T,M> >,
3029 field_component_const<T,M>,
3030 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3031 ::impl<const int&, const field_component_const<T,M>&>::result_type
const
3035 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3036 ::impl<const int&, const field_component_const<T,M>&>() (l, r);
3038 #else // BOOST_VERSION >= 104601
3039 typename boost::proto::detail::enable_binary<
3041 field_domain::proto_grammar,
3043 boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
3046 boost::proto::is_extension<int >,
3047 boost::proto::is_extension<field_component_const<T,M> >
3051 boost::proto::tag::minus,
3053 field_component_const<T,M>
const &
3055 operator- (
int const &left, field_component_const<T,M>
const &right)
3057 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_component_const<T,M>
const &>()(left, right);
3059 #endif // BOOST_VERSION
3060 template<
class T,
class M>
3061 #if BOOST_VERSION < 104601
3063 boost::proto::detail::enable_binary<
3067 is_field<field_component_const<T,M> >,
3068 field_component_const<T,M>,
3069 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3070 ::impl<const T&, const field_component_const<T,M>&>::result_type
const
3074 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3075 ::impl<const T&, const field_component_const<T,M>&>() (l, r);
3077 #else // BOOST_VERSION >= 104601
3078 typename boost::proto::detail::enable_binary<
3080 field_domain::proto_grammar,
3082 boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
3085 boost::proto::is_extension<T >,
3086 boost::proto::is_extension<field_component_const<T,M> >
3090 boost::proto::tag::minus,
3092 field_component_const<T,M>
const &
3094 operator- (T
const &left, field_component_const<T,M>
const &right)
3096 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_component_const<T,M>
const &>()(left, right);
3098 #endif // BOOST_VERSION
3099 template<
class T,
class M>
3100 #if BOOST_VERSION < 104601
3102 boost::proto::detail::enable_binary<
3104 is_field<field_basic<T,M> >,
3108 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3109 ::impl<const field_basic<T,M>&,
const int&>::result_type
const
3113 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3114 ::impl<const field_basic<T,M>&,
const int&>() (l, r);
3116 #else // BOOST_VERSION >= 104601
3117 typename boost::proto::detail::enable_binary<
3119 field_domain::proto_grammar,
3121 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<int > >,
3124 boost::proto::is_extension<field_basic<T,M> >,
3125 boost::proto::is_extension<int >
3129 boost::proto::tag::minus,
3130 field_basic<T,M>
const &,
3133 operator- (field_basic<T,M>
const &left,
int const &right)
3135 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T,M>
const &,
int const &>()(left, right);
3137 #endif // BOOST_VERSION
3138 template<
class T,
class M>
3139 #if BOOST_VERSION < 104601
3141 boost::proto::detail::enable_binary<
3143 is_field<field_basic<T,M> >,
3147 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3148 ::impl<const field_basic<T,M>&,
const T&>::result_type
const
3152 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3153 ::impl<const field_basic<T,M>&,
const T&>() (l, r);
3155 #else // BOOST_VERSION >= 104601
3156 typename boost::proto::detail::enable_binary<
3158 field_domain::proto_grammar,
3160 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<T > >,
3163 boost::proto::is_extension<field_basic<T,M> >,
3164 boost::proto::is_extension<T >
3168 boost::proto::tag::minus,
3169 field_basic<T,M>
const &,
3172 operator- (field_basic<T,M>
const &left, T
const &right)
3174 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T,M>
const &, T
const &>()(left, right);
3176 #endif // BOOST_VERSION
3177 template<
class T,
class M>
3178 #if BOOST_VERSION < 104601
3180 boost::proto::detail::enable_binary<
3182 is_field<field_indirect<T,M> >,
3183 field_indirect<T,M>,
3186 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3187 ::impl<const field_indirect<T,M>&,
const int&>::result_type
const
3191 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3192 ::impl<const field_indirect<T,M>&,
const int&>() (l, r);
3194 #else // BOOST_VERSION >= 104601
3195 typename boost::proto::detail::enable_binary<
3197 field_domain::proto_grammar,
3199 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<int > >,
3202 boost::proto::is_extension<field_indirect<T,M> >,
3203 boost::proto::is_extension<int >
3207 boost::proto::tag::minus,
3208 field_indirect<T,M>
const &,
3211 operator- (field_indirect<T,M>
const &left,
int const &right)
3213 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T,M>
const &,
int const &>()(left, right);
3215 #endif // BOOST_VERSION
3216 template<
class T,
class M>
3217 #if BOOST_VERSION < 104601
3219 boost::proto::detail::enable_binary<
3221 is_field<field_indirect<T,M> >,
3222 field_indirect<T,M>,
3225 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3226 ::impl<const field_indirect<T,M>&,
const T&>::result_type
const
3230 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3231 ::impl<const field_indirect<T,M>&,
const T&>() (l, r);
3233 #else // BOOST_VERSION >= 104601
3234 typename boost::proto::detail::enable_binary<
3236 field_domain::proto_grammar,
3238 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<T > >,
3241 boost::proto::is_extension<field_indirect<T,M> >,
3242 boost::proto::is_extension<T >
3246 boost::proto::tag::minus,
3247 field_indirect<T,M>
const &,
3250 operator- (field_indirect<T,M>
const &left, T
const &right)
3252 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T,M>
const &, T
const &>()(left, right);
3254 #endif // BOOST_VERSION
3255 template<
class T,
class M>
3256 #if BOOST_VERSION < 104601
3258 boost::proto::detail::enable_binary<
3260 is_field<field_indirect_const<T,M> >,
3261 field_indirect_const<T,M>,
3264 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3265 ::impl<const field_indirect_const<T,M>&,
const int&>::result_type
const
3269 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3270 ::impl<const field_indirect_const<T,M>&,
const int&>() (l, r);
3272 #else // BOOST_VERSION >= 104601
3273 typename boost::proto::detail::enable_binary<
3275 field_domain::proto_grammar,
3277 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<int > >,
3280 boost::proto::is_extension<field_indirect_const<T,M> >,
3281 boost::proto::is_extension<int >
3285 boost::proto::tag::minus,
3286 field_indirect_const<T,M>
const &,
3289 operator- (field_indirect_const<T,M>
const &left,
int const &right)
3291 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T,M>
const &,
int const &>()(left, right);
3293 #endif // BOOST_VERSION
3294 template<
class T,
class M>
3295 #if BOOST_VERSION < 104601
3297 boost::proto::detail::enable_binary<
3299 is_field<field_indirect_const<T,M> >,
3300 field_indirect_const<T,M>,
3303 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3304 ::impl<const field_indirect_const<T,M>&,
const T&>::result_type
const
3308 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3309 ::impl<const field_indirect_const<T,M>&,
const T&>() (l, r);
3311 #else // BOOST_VERSION >= 104601
3312 typename boost::proto::detail::enable_binary<
3314 field_domain::proto_grammar,
3316 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
3319 boost::proto::is_extension<field_indirect_const<T,M> >,
3320 boost::proto::is_extension<T >
3324 boost::proto::tag::minus,
3325 field_indirect_const<T,M>
const &,
3328 operator- (field_indirect_const<T,M>
const &left, T
const &right)
3330 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T,M>
const &, T
const &>()(left, right);
3332 #endif // BOOST_VERSION
3333 template<
class T,
class M>
3334 #if BOOST_VERSION < 104601
3336 boost::proto::detail::enable_binary<
3338 is_field<field_component<T,M> >,
3339 field_component<T,M>,
3342 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3343 ::impl<const field_component<T,M>&,
const int&>::result_type
const
3347 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3348 ::impl<const field_component<T,M>&,
const int&>() (l, r);
3350 #else // BOOST_VERSION >= 104601
3351 typename boost::proto::detail::enable_binary<
3353 field_domain::proto_grammar,
3355 boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
3358 boost::proto::is_extension<field_component<T,M> >,
3359 boost::proto::is_extension<int >
3363 boost::proto::tag::minus,
3364 field_component<T,M>
const &,
3367 operator- (field_component<T,M>
const &left,
int const &right)
3369 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M>
const &,
int const &>()(left, right);
3371 #endif // BOOST_VERSION
3372 template<
class T,
class M>
3373 #if BOOST_VERSION < 104601
3375 boost::proto::detail::enable_binary<
3377 is_field<field_component<T,M> >,
3378 field_component<T,M>,
3381 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3382 ::impl<const field_component<T,M>&,
const T&>::result_type
const
3386 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3387 ::impl<const field_component<T,M>&,
const T&>() (l, r);
3389 #else // BOOST_VERSION >= 104601
3390 typename boost::proto::detail::enable_binary<
3392 field_domain::proto_grammar,
3394 boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
3397 boost::proto::is_extension<field_component<T,M> >,
3398 boost::proto::is_extension<T >
3402 boost::proto::tag::minus,
3403 field_component<T,M>
const &,
3406 operator- (field_component<T,M>
const &left, T
const &right)
3408 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M>
const &, T
const &>()(left, right);
3410 #endif // BOOST_VERSION
3411 template<
class T,
class M>
3412 #if BOOST_VERSION < 104601
3414 boost::proto::detail::enable_binary<
3416 is_field<field_component_const<T,M> >,
3417 field_component_const<T,M>,
3420 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3421 ::impl<const field_component_const<T,M>&,
const int&>::result_type
const
3425 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3426 ::impl<const field_component_const<T,M>&,
const int&>() (l, r);
3428 #else // BOOST_VERSION >= 104601
3429 typename boost::proto::detail::enable_binary<
3431 field_domain::proto_grammar,
3433 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
3436 boost::proto::is_extension<field_component_const<T,M> >,
3437 boost::proto::is_extension<int >
3441 boost::proto::tag::minus,
3442 field_component_const<T,M>
const &,
3445 operator- (field_component_const<T,M>
const &left,
int const &right)
3447 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M>
const &,
int const &>()(left, right);
3449 #endif // BOOST_VERSION
3450 template<
class T,
class M>
3451 #if BOOST_VERSION < 104601
3453 boost::proto::detail::enable_binary<
3455 is_field<field_component_const<T,M> >,
3456 field_component_const<T,M>,
3459 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3460 ::impl<const field_component_const<T,M>&,
const T&>::result_type
const
3464 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3465 ::impl<const field_component_const<T,M>&,
const T&>() (l, r);
3467 #else // BOOST_VERSION >= 104601
3468 typename boost::proto::detail::enable_binary<
3470 field_domain::proto_grammar,
3472 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
3475 boost::proto::is_extension<field_component_const<T,M> >,
3476 boost::proto::is_extension<T >
3480 boost::proto::tag::minus,
3481 field_component_const<T,M>
const &,
3484 operator- (field_component_const<T,M>
const &left, T
const &right)
3486 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M>
const &, T
const &>()(left, right);
3488 #endif // BOOST_VERSION
3489 template<
class Expr>
3490 #if BOOST_VERSION < 104601
3492 boost::proto::detail::enable_binary<
3496 is_field<field_expr<Expr> >,
3498 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3499 ::impl<const int&, const field_expr<Expr>&>::result_type
const
3503 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3504 ::impl<const int&, const field_expr<Expr>&>() (l, r);
3506 #else // BOOST_VERSION >= 104601
3507 typename boost::proto::detail::enable_binary<
3509 field_domain::proto_grammar,
3511 boost::mpl::or_<is_field<int >, is_field<field_expr<Expr> > >,
3514 boost::proto::is_extension<int >,
3515 boost::proto::is_extension<field_expr<Expr> >
3519 boost::proto::tag::minus,
3521 field_expr<Expr>
const &
3523 operator- (
int const &left, field_expr<Expr>
const &right)
3525 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, int const &, field_expr<Expr>
const &>()(left, right);
3527 #endif // BOOST_VERSION
3528 template<
class Expr>
3529 #if BOOST_VERSION < 104601
3531 boost::proto::detail::enable_binary<
3533 is_field<field_expr<Expr> >,
3537 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3538 ::impl<const field_expr<Expr>&,
const int&>::result_type
const
3542 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3543 ::impl<const field_expr<Expr>&,
const int&>() (l, r);
3545 #else // BOOST_VERSION >= 104601
3546 typename boost::proto::detail::enable_binary<
3548 field_domain::proto_grammar,
3550 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<int > >,
3553 boost::proto::is_extension<field_expr<Expr> >,
3554 boost::proto::is_extension<int >
3558 boost::proto::tag::minus,
3559 field_expr<Expr>
const &,
3562 operator- (field_expr<Expr>
const &left,
int const &right)
3564 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &,
int const &>()(left, right);
3566 #endif // BOOST_VERSION
3567 template<
class T,
class Expr>
3568 #if BOOST_VERSION < 104601
3570 boost::proto::detail::enable_binary<
3574 is_field<field_expr<Expr> >,
3576 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3577 ::impl<const T&, const field_expr<Expr>&>::result_type
const
3581 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3582 ::impl<const T&, const field_expr<Expr>&>() (l, r);
3584 #else // BOOST_VERSION >= 104601
3585 typename boost::proto::detail::enable_binary<
3587 field_domain::proto_grammar,
3589 boost::mpl::or_<is_field<T >, is_field<field_expr<Expr> > >,
3592 boost::proto::is_extension<T >,
3593 boost::proto::is_extension<field_expr<Expr> >
3597 boost::proto::tag::minus,
3599 field_expr<Expr>
const &
3601 operator- (T
const &left, field_expr<Expr>
const &right)
3603 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, T const &, field_expr<Expr>
const &>()(left, right);
3605 #endif // BOOST_VERSION
3606 template<
class T,
class Expr>
3607 #if BOOST_VERSION < 104601
3609 boost::proto::detail::enable_binary<
3611 is_field<field_expr<Expr> >,
3615 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3616 ::impl<const field_expr<Expr>&,
const T&>::result_type
const
3620 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3621 ::impl<const field_expr<Expr>&,
const T&>() (l, r);
3623 #else // BOOST_VERSION >= 104601
3624 typename boost::proto::detail::enable_binary<
3626 field_domain::proto_grammar,
3628 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<T > >,
3631 boost::proto::is_extension<field_expr<Expr> >,
3632 boost::proto::is_extension<T >
3636 boost::proto::tag::minus,
3637 field_expr<Expr>
const &,
3640 operator- (field_expr<Expr>
const &left, T
const &right)
3642 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, T
const &>()(left, right);
3644 #endif // BOOST_VERSION
3645 template<
class T1,
class T2,
class M>
3646 #if BOOST_VERSION < 104601
3648 boost::proto::detail::enable_binary<
3650 is_field<field_basic<T1,M> >,
3652 is_field<field_basic<T2,M> >,
3654 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3655 ::impl<const field_basic<T1,M>&,
const field_basic<T2,M>&>::result_type
const
3659 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3662 #else // BOOST_VERSION >= 104601
3663 typename boost::proto::detail::enable_binary<
3665 field_domain::proto_grammar,
3667 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_basic<T2,M> > >,
3670 boost::proto::is_extension<field_basic<T1,M> >,
3671 boost::proto::is_extension<field_basic<T2,M> >
3675 boost::proto::tag::minus,
3676 field_basic<T1,M>
const &,
3677 field_basic<T2,M>
const &
3679 operator- (field_basic<T1,M>
const &left, field_basic<T2,M>
const &right)
3681 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
3683 #endif // BOOST_VERSION
3684 template<
class T1,
class T2,
class M>
3685 #if BOOST_VERSION < 104601
3687 boost::proto::detail::enable_binary<
3689 is_field<field_basic<T1,M> >,
3691 is_field<field_indirect<T2,M> >,
3692 field_indirect<T2,M>,
3693 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3694 ::impl<const field_basic<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
3698 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3701 #else // BOOST_VERSION >= 104601
3702 typename boost::proto::detail::enable_binary<
3704 field_domain::proto_grammar,
3706 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect<T2,M> > >,
3709 boost::proto::is_extension<field_basic<T1,M> >,
3710 boost::proto::is_extension<field_indirect<T2,M> >
3714 boost::proto::tag::minus,
3715 field_basic<T1,M>
const &,
3716 field_indirect<T2,M>
const &
3718 operator- (field_basic<T1,M>
const &left, field_indirect<T2,M>
const &right)
3720 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
3722 #endif // BOOST_VERSION
3723 template<
class T1,
class T2,
class M>
3724 #if BOOST_VERSION < 104601
3726 boost::proto::detail::enable_binary<
3728 is_field<field_basic<T1,M> >,
3730 is_field<field_indirect_const<T2,M> >,
3731 field_indirect_const<T2,M>,
3732 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3733 ::impl<const field_basic<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
3737 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3740 #else // BOOST_VERSION >= 104601
3741 typename boost::proto::detail::enable_binary<
3743 field_domain::proto_grammar,
3745 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_indirect_const<T2,M> > >,
3748 boost::proto::is_extension<field_basic<T1,M> >,
3749 boost::proto::is_extension<field_indirect_const<T2,M> >
3753 boost::proto::tag::minus,
3754 field_basic<T1,M>
const &,
3755 field_indirect_const<T2,M>
const &
3757 operator- (field_basic<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
3759 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);
3761 #endif // BOOST_VERSION
3762 template<
class T1,
class T2,
class M>
3763 #if BOOST_VERSION < 104601
3765 boost::proto::detail::enable_binary<
3767 is_field<field_basic<T1,M> >,
3769 is_field<field_component<T2,M> >,
3770 field_component<T2,M>,
3771 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3772 ::impl<const field_basic<T1,M>&,
const field_component<T2,M>&>::result_type
const
3776 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3779 #else // BOOST_VERSION >= 104601
3780 typename boost::proto::detail::enable_binary<
3782 field_domain::proto_grammar,
3784 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component<T2,M> > >,
3787 boost::proto::is_extension<field_basic<T1,M> >,
3788 boost::proto::is_extension<field_component<T2,M> >
3792 boost::proto::tag::minus,
3793 field_basic<T1,M>
const &,
3794 field_component<T2,M>
const &
3796 operator- (field_basic<T1,M>
const &left, field_component<T2,M>
const &right)
3798 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
3800 #endif // BOOST_VERSION
3801 template<
class T1,
class T2,
class M>
3802 #if BOOST_VERSION < 104601
3804 boost::proto::detail::enable_binary<
3806 is_field<field_basic<T1,M> >,
3808 is_field<field_component_const<T2,M> >,
3809 field_component_const<T2,M>,
3810 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3811 ::impl<const field_basic<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
3815 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3818 #else // BOOST_VERSION >= 104601
3819 typename boost::proto::detail::enable_binary<
3821 field_domain::proto_grammar,
3823 boost::mpl::or_<is_field<field_basic<T1,M> >, is_field<field_component_const<T2,M> > >,
3826 boost::proto::is_extension<field_basic<T1,M> >,
3827 boost::proto::is_extension<field_component_const<T2,M> >
3831 boost::proto::tag::minus,
3832 field_basic<T1,M>
const &,
3833 field_component_const<T2,M>
const &
3835 operator- (field_basic<T1,M>
const &left, field_component_const<T2,M>
const &right)
3837 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);
3839 #endif // BOOST_VERSION
3840 template<
class T1,
class T2,
class M>
3841 #if BOOST_VERSION < 104601
3843 boost::proto::detail::enable_binary<
3845 is_field<field_indirect<T1,M> >,
3846 field_indirect<T1,M>,
3847 is_field<field_basic<T2,M> >,
3849 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3850 ::impl<const field_indirect<T1,M>&,
const field_basic<T2,M>&>::result_type
const
3854 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3857 #else // BOOST_VERSION >= 104601
3858 typename boost::proto::detail::enable_binary<
3860 field_domain::proto_grammar,
3862 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_basic<T2,M> > >,
3865 boost::proto::is_extension<field_indirect<T1,M> >,
3866 boost::proto::is_extension<field_basic<T2,M> >
3870 boost::proto::tag::minus,
3871 field_indirect<T1,M>
const &,
3872 field_basic<T2,M>
const &
3874 operator- (field_indirect<T1,M>
const &left, field_basic<T2,M>
const &right)
3876 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
3878 #endif // BOOST_VERSION
3879 template<
class T1,
class T2,
class M>
3880 #if BOOST_VERSION < 104601
3882 boost::proto::detail::enable_binary<
3884 is_field<field_indirect<T1,M> >,
3885 field_indirect<T1,M>,
3886 is_field<field_indirect<T2,M> >,
3887 field_indirect<T2,M>,
3888 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3889 ::impl<const field_indirect<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
3893 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3896 #else // BOOST_VERSION >= 104601
3897 typename boost::proto::detail::enable_binary<
3899 field_domain::proto_grammar,
3901 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect<T2,M> > >,
3904 boost::proto::is_extension<field_indirect<T1,M> >,
3905 boost::proto::is_extension<field_indirect<T2,M> >
3909 boost::proto::tag::minus,
3910 field_indirect<T1,M>
const &,
3911 field_indirect<T2,M>
const &
3913 operator- (field_indirect<T1,M>
const &left, field_indirect<T2,M>
const &right)
3915 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
3917 #endif // BOOST_VERSION
3918 template<
class T1,
class T2,
class M>
3919 #if BOOST_VERSION < 104601
3921 boost::proto::detail::enable_binary<
3923 is_field<field_indirect<T1,M> >,
3924 field_indirect<T1,M>,
3925 is_field<field_indirect_const<T2,M> >,
3926 field_indirect_const<T2,M>,
3927 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3928 ::impl<const field_indirect<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
3932 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3935 #else // BOOST_VERSION >= 104601
3936 typename boost::proto::detail::enable_binary<
3938 field_domain::proto_grammar,
3940 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_indirect_const<T2,M> > >,
3943 boost::proto::is_extension<field_indirect<T1,M> >,
3944 boost::proto::is_extension<field_indirect_const<T2,M> >
3948 boost::proto::tag::minus,
3949 field_indirect<T1,M>
const &,
3950 field_indirect_const<T2,M>
const &
3952 operator- (field_indirect<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
3954 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);
3956 #endif // BOOST_VERSION
3957 template<
class T1,
class T2,
class M>
3958 #if BOOST_VERSION < 104601
3960 boost::proto::detail::enable_binary<
3962 is_field<field_indirect<T1,M> >,
3963 field_indirect<T1,M>,
3964 is_field<field_component<T2,M> >,
3965 field_component<T2,M>,
3966 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3967 ::impl<const field_indirect<T1,M>&,
const field_component<T2,M>&>::result_type
const
3971 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
3974 #else // BOOST_VERSION >= 104601
3975 typename boost::proto::detail::enable_binary<
3977 field_domain::proto_grammar,
3979 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component<T2,M> > >,
3982 boost::proto::is_extension<field_indirect<T1,M> >,
3983 boost::proto::is_extension<field_component<T2,M> >
3987 boost::proto::tag::minus,
3988 field_indirect<T1,M>
const &,
3989 field_component<T2,M>
const &
3991 operator- (field_indirect<T1,M>
const &left, field_component<T2,M>
const &right)
3993 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
3995 #endif // BOOST_VERSION
3996 template<
class T1,
class T2,
class M>
3997 #if BOOST_VERSION < 104601
3999 boost::proto::detail::enable_binary<
4001 is_field<field_indirect<T1,M> >,
4002 field_indirect<T1,M>,
4003 is_field<field_component_const<T2,M> >,
4004 field_component_const<T2,M>,
4005 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4006 ::impl<const field_indirect<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
4010 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4013 #else // BOOST_VERSION >= 104601
4014 typename boost::proto::detail::enable_binary<
4016 field_domain::proto_grammar,
4018 boost::mpl::or_<is_field<field_indirect<T1,M> >, is_field<field_component_const<T2,M> > >,
4021 boost::proto::is_extension<field_indirect<T1,M> >,
4022 boost::proto::is_extension<field_component_const<T2,M> >
4026 boost::proto::tag::minus,
4027 field_indirect<T1,M>
const &,
4028 field_component_const<T2,M>
const &
4030 operator- (field_indirect<T1,M>
const &left, field_component_const<T2,M>
const &right)
4032 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);
4034 #endif // BOOST_VERSION
4035 template<
class T1,
class T2,
class M>
4036 #if BOOST_VERSION < 104601
4038 boost::proto::detail::enable_binary<
4040 is_field<field_indirect_const<T1,M> >,
4041 field_indirect_const<T1,M>,
4042 is_field<field_basic<T2,M> >,
4044 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4045 ::impl<const field_indirect_const<T1,M>&,
const field_basic<T2,M>&>::result_type
const
4049 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4052 #else // BOOST_VERSION >= 104601
4053 typename boost::proto::detail::enable_binary<
4055 field_domain::proto_grammar,
4057 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_basic<T2,M> > >,
4060 boost::proto::is_extension<field_indirect_const<T1,M> >,
4061 boost::proto::is_extension<field_basic<T2,M> >
4065 boost::proto::tag::minus,
4066 field_indirect_const<T1,M>
const &,
4067 field_basic<T2,M>
const &
4069 operator- (field_indirect_const<T1,M>
const &left, field_basic<T2,M>
const &right)
4071 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
4073 #endif // BOOST_VERSION
4074 template<
class T1,
class T2,
class M>
4075 #if BOOST_VERSION < 104601
4077 boost::proto::detail::enable_binary<
4079 is_field<field_indirect_const<T1,M> >,
4080 field_indirect_const<T1,M>,
4081 is_field<field_indirect<T2,M> >,
4082 field_indirect<T2,M>,
4083 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4084 ::impl<const field_indirect_const<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
4088 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4091 #else // BOOST_VERSION >= 104601
4092 typename boost::proto::detail::enable_binary<
4094 field_domain::proto_grammar,
4096 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect<T2,M> > >,
4099 boost::proto::is_extension<field_indirect_const<T1,M> >,
4100 boost::proto::is_extension<field_indirect<T2,M> >
4104 boost::proto::tag::minus,
4105 field_indirect_const<T1,M>
const &,
4106 field_indirect<T2,M>
const &
4108 operator- (field_indirect_const<T1,M>
const &left, field_indirect<T2,M>
const &right)
4110 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
4112 #endif // BOOST_VERSION
4113 template<
class T1,
class T2,
class M>
4114 #if BOOST_VERSION < 104601
4116 boost::proto::detail::enable_binary<
4118 is_field<field_indirect_const<T1,M> >,
4119 field_indirect_const<T1,M>,
4120 is_field<field_indirect_const<T2,M> >,
4121 field_indirect_const<T2,M>,
4122 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4123 ::impl<const field_indirect_const<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
4127 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4130 #else // BOOST_VERSION >= 104601
4131 typename boost::proto::detail::enable_binary<
4133 field_domain::proto_grammar,
4135 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4138 boost::proto::is_extension<field_indirect_const<T1,M> >,
4139 boost::proto::is_extension<field_indirect_const<T2,M> >
4143 boost::proto::tag::minus,
4144 field_indirect_const<T1,M>
const &,
4145 field_indirect_const<T2,M>
const &
4147 operator- (field_indirect_const<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
4149 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);
4151 #endif // BOOST_VERSION
4152 template<
class T1,
class T2,
class M>
4153 #if BOOST_VERSION < 104601
4155 boost::proto::detail::enable_binary<
4157 is_field<field_indirect_const<T1,M> >,
4158 field_indirect_const<T1,M>,
4159 is_field<field_component<T2,M> >,
4160 field_component<T2,M>,
4161 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4162 ::impl<const field_indirect_const<T1,M>&,
const field_component<T2,M>&>::result_type
const
4166 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4169 #else // BOOST_VERSION >= 104601
4170 typename boost::proto::detail::enable_binary<
4172 field_domain::proto_grammar,
4174 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component<T2,M> > >,
4177 boost::proto::is_extension<field_indirect_const<T1,M> >,
4178 boost::proto::is_extension<field_component<T2,M> >
4182 boost::proto::tag::minus,
4183 field_indirect_const<T1,M>
const &,
4184 field_component<T2,M>
const &
4186 operator- (field_indirect_const<T1,M>
const &left, field_component<T2,M>
const &right)
4188 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);
4190 #endif // BOOST_VERSION
4191 template<
class T1,
class T2,
class M>
4192 #if BOOST_VERSION < 104601
4194 boost::proto::detail::enable_binary<
4196 is_field<field_indirect_const<T1,M> >,
4197 field_indirect_const<T1,M>,
4198 is_field<field_component_const<T2,M> >,
4199 field_component_const<T2,M>,
4200 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4201 ::impl<const field_indirect_const<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
4205 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4208 #else // BOOST_VERSION >= 104601
4209 typename boost::proto::detail::enable_binary<
4211 field_domain::proto_grammar,
4213 boost::mpl::or_<is_field<field_indirect_const<T1,M> >, is_field<field_component_const<T2,M> > >,
4216 boost::proto::is_extension<field_indirect_const<T1,M> >,
4217 boost::proto::is_extension<field_component_const<T2,M> >
4221 boost::proto::tag::minus,
4222 field_indirect_const<T1,M>
const &,
4223 field_component_const<T2,M>
const &
4225 operator- (field_indirect_const<T1,M>
const &left, field_component_const<T2,M>
const &right)
4227 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);
4229 #endif // BOOST_VERSION
4230 template<
class T1,
class T2,
class M>
4231 #if BOOST_VERSION < 104601
4233 boost::proto::detail::enable_binary<
4235 is_field<field_component<T1,M> >,
4236 field_component<T1,M>,
4237 is_field<field_basic<T2,M> >,
4239 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4240 ::impl<const field_component<T1,M>&,
const field_basic<T2,M>&>::result_type
const
4244 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4247 #else // BOOST_VERSION >= 104601
4248 typename boost::proto::detail::enable_binary<
4250 field_domain::proto_grammar,
4252 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_basic<T2,M> > >,
4255 boost::proto::is_extension<field_component<T1,M> >,
4256 boost::proto::is_extension<field_basic<T2,M> >
4260 boost::proto::tag::minus,
4261 field_component<T1,M>
const &,
4262 field_basic<T2,M>
const &
4264 operator- (field_component<T1,M>
const &left, field_basic<T2,M>
const &right)
4266 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M>
const &, field_basic<T2,M>
const &>()(left, right);
4268 #endif // BOOST_VERSION
4269 template<
class T1,
class T2,
class M>
4270 #if BOOST_VERSION < 104601
4272 boost::proto::detail::enable_binary<
4274 is_field<field_component<T1,M> >,
4275 field_component<T1,M>,
4276 is_field<field_indirect<T2,M> >,
4277 field_indirect<T2,M>,
4278 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4279 ::impl<const field_component<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
4283 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4286 #else // BOOST_VERSION >= 104601
4287 typename boost::proto::detail::enable_binary<
4289 field_domain::proto_grammar,
4291 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect<T2,M> > >,
4294 boost::proto::is_extension<field_component<T1,M> >,
4295 boost::proto::is_extension<field_indirect<T2,M> >
4299 boost::proto::tag::minus,
4300 field_component<T1,M>
const &,
4301 field_indirect<T2,M>
const &
4303 operator- (field_component<T1,M>
const &left, field_indirect<T2,M>
const &right)
4305 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M>
const &, field_indirect<T2,M>
const &>()(left, right);
4307 #endif // BOOST_VERSION
4308 template<
class T1,
class T2,
class M>
4309 #if BOOST_VERSION < 104601
4311 boost::proto::detail::enable_binary<
4313 is_field<field_component<T1,M> >,
4314 field_component<T1,M>,
4315 is_field<field_indirect_const<T2,M> >,
4316 field_indirect_const<T2,M>,
4317 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4318 ::impl<const field_component<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
4322 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4325 #else // BOOST_VERSION >= 104601
4326 typename boost::proto::detail::enable_binary<
4328 field_domain::proto_grammar,
4330 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4333 boost::proto::is_extension<field_component<T1,M> >,
4334 boost::proto::is_extension<field_indirect_const<T2,M> >
4338 boost::proto::tag::minus,
4339 field_component<T1,M>
const &,
4340 field_indirect_const<T2,M>
const &
4342 operator- (field_component<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
4344 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);
4346 #endif // BOOST_VERSION
4347 template<
class T1,
class T2,
class M>
4348 #if BOOST_VERSION < 104601
4350 boost::proto::detail::enable_binary<
4352 is_field<field_component<T1,M> >,
4353 field_component<T1,M>,
4354 is_field<field_component<T2,M> >,
4355 field_component<T2,M>,
4356 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4357 ::impl<const field_component<T1,M>&,
const field_component<T2,M>&>::result_type
const
4361 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4364 #else // BOOST_VERSION >= 104601
4365 typename boost::proto::detail::enable_binary<
4367 field_domain::proto_grammar,
4369 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component<T2,M> > >,
4372 boost::proto::is_extension<field_component<T1,M> >,
4373 boost::proto::is_extension<field_component<T2,M> >
4377 boost::proto::tag::minus,
4378 field_component<T1,M>
const &,
4379 field_component<T2,M>
const &
4381 operator- (field_component<T1,M>
const &left, field_component<T2,M>
const &right)
4383 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T1,M>
const &, field_component<T2,M>
const &>()(left, right);
4385 #endif // BOOST_VERSION
4386 template<
class T1,
class T2,
class M>
4387 #if BOOST_VERSION < 104601
4389 boost::proto::detail::enable_binary<
4391 is_field<field_component<T1,M> >,
4392 field_component<T1,M>,
4393 is_field<field_component_const<T2,M> >,
4394 field_component_const<T2,M>,
4395 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4396 ::impl<const field_component<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
4400 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4403 #else // BOOST_VERSION >= 104601
4404 typename boost::proto::detail::enable_binary<
4406 field_domain::proto_grammar,
4408 boost::mpl::or_<is_field<field_component<T1,M> >, is_field<field_component_const<T2,M> > >,
4411 boost::proto::is_extension<field_component<T1,M> >,
4412 boost::proto::is_extension<field_component_const<T2,M> >
4416 boost::proto::tag::minus,
4417 field_component<T1,M>
const &,
4418 field_component_const<T2,M>
const &
4420 operator- (field_component<T1,M>
const &left, field_component_const<T2,M>
const &right)
4422 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);
4424 #endif // BOOST_VERSION
4425 template<
class T1,
class T2,
class M>
4426 #if BOOST_VERSION < 104601
4428 boost::proto::detail::enable_binary<
4430 is_field<field_component_const<T1,M> >,
4431 field_component_const<T1,M>,
4432 is_field<field_basic<T2,M> >,
4434 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4435 ::impl<const field_component_const<T1,M>&,
const field_basic<T2,M>&>::result_type
const
4439 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4442 #else // BOOST_VERSION >= 104601
4443 typename boost::proto::detail::enable_binary<
4445 field_domain::proto_grammar,
4447 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_basic<T2,M> > >,
4450 boost::proto::is_extension<field_component_const<T1,M> >,
4451 boost::proto::is_extension<field_basic<T2,M> >
4455 boost::proto::tag::minus,
4456 field_component_const<T1,M>
const &,
4457 field_basic<T2,M>
const &
4459 operator- (field_component_const<T1,M>
const &left, field_basic<T2,M>
const &right)
4461 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);
4463 #endif // BOOST_VERSION
4464 template<
class T1,
class T2,
class M>
4465 #if BOOST_VERSION < 104601
4467 boost::proto::detail::enable_binary<
4469 is_field<field_component_const<T1,M> >,
4470 field_component_const<T1,M>,
4471 is_field<field_indirect<T2,M> >,
4472 field_indirect<T2,M>,
4473 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4474 ::impl<const field_component_const<T1,M>&,
const field_indirect<T2,M>&>::result_type
const
4478 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4481 #else // BOOST_VERSION >= 104601
4482 typename boost::proto::detail::enable_binary<
4484 field_domain::proto_grammar,
4486 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect<T2,M> > >,
4489 boost::proto::is_extension<field_component_const<T1,M> >,
4490 boost::proto::is_extension<field_indirect<T2,M> >
4494 boost::proto::tag::minus,
4495 field_component_const<T1,M>
const &,
4496 field_indirect<T2,M>
const &
4498 operator- (field_component_const<T1,M>
const &left, field_indirect<T2,M>
const &right)
4500 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);
4502 #endif // BOOST_VERSION
4503 template<
class T1,
class T2,
class M>
4504 #if BOOST_VERSION < 104601
4506 boost::proto::detail::enable_binary<
4508 is_field<field_component_const<T1,M> >,
4509 field_component_const<T1,M>,
4510 is_field<field_indirect_const<T2,M> >,
4511 field_indirect_const<T2,M>,
4512 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4513 ::impl<const field_component_const<T1,M>&,
const field_indirect_const<T2,M>&>::result_type
const
4517 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4520 #else // BOOST_VERSION >= 104601
4521 typename boost::proto::detail::enable_binary<
4523 field_domain::proto_grammar,
4525 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_indirect_const<T2,M> > >,
4528 boost::proto::is_extension<field_component_const<T1,M> >,
4529 boost::proto::is_extension<field_indirect_const<T2,M> >
4533 boost::proto::tag::minus,
4534 field_component_const<T1,M>
const &,
4535 field_indirect_const<T2,M>
const &
4537 operator- (field_component_const<T1,M>
const &left, field_indirect_const<T2,M>
const &right)
4539 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);
4541 #endif // BOOST_VERSION
4542 template<
class T1,
class T2,
class M>
4543 #if BOOST_VERSION < 104601
4545 boost::proto::detail::enable_binary<
4547 is_field<field_component_const<T1,M> >,
4548 field_component_const<T1,M>,
4549 is_field<field_component<T2,M> >,
4550 field_component<T2,M>,
4551 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4552 ::impl<const field_component_const<T1,M>&,
const field_component<T2,M>&>::result_type
const
4556 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4559 #else // BOOST_VERSION >= 104601
4560 typename boost::proto::detail::enable_binary<
4562 field_domain::proto_grammar,
4564 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component<T2,M> > >,
4567 boost::proto::is_extension<field_component_const<T1,M> >,
4568 boost::proto::is_extension<field_component<T2,M> >
4572 boost::proto::tag::minus,
4573 field_component_const<T1,M>
const &,
4574 field_component<T2,M>
const &
4576 operator- (field_component_const<T1,M>
const &left, field_component<T2,M>
const &right)
4578 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);
4580 #endif // BOOST_VERSION
4581 template<
class T1,
class T2,
class M>
4582 #if BOOST_VERSION < 104601
4584 boost::proto::detail::enable_binary<
4586 is_field<field_component_const<T1,M> >,
4587 field_component_const<T1,M>,
4588 is_field<field_component_const<T2,M> >,
4589 field_component_const<T2,M>,
4590 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4591 ::impl<const field_component_const<T1,M>&,
const field_component_const<T2,M>&>::result_type
const
4595 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4598 #else // BOOST_VERSION >= 104601
4599 typename boost::proto::detail::enable_binary<
4601 field_domain::proto_grammar,
4603 boost::mpl::or_<is_field<field_component_const<T1,M> >, is_field<field_component_const<T2,M> > >,
4606 boost::proto::is_extension<field_component_const<T1,M> >,
4607 boost::proto::is_extension<field_component_const<T2,M> >
4611 boost::proto::tag::minus,
4612 field_component_const<T1,M>
const &,
4613 field_component_const<T2,M>
const &
4615 operator- (field_component_const<T1,M>
const &left, field_component_const<T2,M>
const &right)
4617 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);
4619 #endif // BOOST_VERSION
4620 template<
class T,
class M,
class Expr>
4621 #if BOOST_VERSION < 104601
4623 boost::proto::detail::enable_binary<
4625 is_field<field_basic<T,M> >,
4627 is_field<field_expr<Expr> >,
4629 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4630 ::impl<const field_basic<T,M>&,
const field_expr<Expr>&>::result_type
const
4634 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4637 #else // BOOST_VERSION >= 104601
4638 typename boost::proto::detail::enable_binary<
4640 field_domain::proto_grammar,
4642 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<field_expr<Expr> > >,
4645 boost::proto::is_extension<field_basic<T,M> >,
4646 boost::proto::is_extension<field_expr<Expr> >
4650 boost::proto::tag::minus,
4651 field_basic<T,M>
const &,
4652 field_expr<Expr>
const &
4654 operator- (field_basic<T,M>
const &left, field_expr<Expr>
const &right)
4656 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_basic<T,M>
const &, field_expr<Expr>
const &>()(left, right);
4658 #endif // BOOST_VERSION
4659 template<
class T,
class M,
class Expr>
4660 #if BOOST_VERSION < 104601
4662 boost::proto::detail::enable_binary<
4664 is_field<field_expr<Expr> >,
4666 is_field<field_basic<T,M> >,
4668 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4669 ::impl<const field_expr<Expr>&,
const field_basic<T,M>&>::result_type
const
4673 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4676 #else // BOOST_VERSION >= 104601
4677 typename boost::proto::detail::enable_binary<
4679 field_domain::proto_grammar,
4681 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_basic<T,M> > >,
4684 boost::proto::is_extension<field_expr<Expr> >,
4685 boost::proto::is_extension<field_basic<T,M> >
4689 boost::proto::tag::minus,
4690 field_expr<Expr>
const &,
4691 field_basic<T,M>
const &
4693 operator- (field_expr<Expr>
const &left, field_basic<T,M>
const &right)
4695 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, field_basic<T,M>
const &>()(left, right);
4697 #endif // BOOST_VERSION
4698 template<
class T,
class M,
class Expr>
4699 #if BOOST_VERSION < 104601
4701 boost::proto::detail::enable_binary<
4703 is_field<field_indirect<T,M> >,
4704 field_indirect<T,M>,
4705 is_field<field_expr<Expr> >,
4707 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4708 ::impl<const field_indirect<T,M>&,
const field_expr<Expr>&>::result_type
const
4712 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4715 #else // BOOST_VERSION >= 104601
4716 typename boost::proto::detail::enable_binary<
4718 field_domain::proto_grammar,
4720 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<field_expr<Expr> > >,
4723 boost::proto::is_extension<field_indirect<T,M> >,
4724 boost::proto::is_extension<field_expr<Expr> >
4728 boost::proto::tag::minus,
4729 field_indirect<T,M>
const &,
4730 field_expr<Expr>
const &
4732 operator- (field_indirect<T,M>
const &left, field_expr<Expr>
const &right)
4734 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect<T,M>
const &, field_expr<Expr>
const &>()(left, right);
4736 #endif // BOOST_VERSION
4737 template<
class T,
class M,
class Expr>
4738 #if BOOST_VERSION < 104601
4740 boost::proto::detail::enable_binary<
4742 is_field<field_expr<Expr> >,
4744 is_field<field_indirect<T,M> >,
4745 field_indirect<T,M>,
4746 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4747 ::impl<const field_expr<Expr>&,
const field_indirect<T,M>&>::result_type
const
4751 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4754 #else // BOOST_VERSION >= 104601
4755 typename boost::proto::detail::enable_binary<
4757 field_domain::proto_grammar,
4759 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect<T,M> > >,
4762 boost::proto::is_extension<field_expr<Expr> >,
4763 boost::proto::is_extension<field_indirect<T,M> >
4767 boost::proto::tag::minus,
4768 field_expr<Expr>
const &,
4769 field_indirect<T,M>
const &
4771 operator- (field_expr<Expr>
const &left, field_indirect<T,M>
const &right)
4773 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, field_indirect<T,M>
const &>()(left, right);
4775 #endif // BOOST_VERSION
4776 template<
class T,
class M,
class Expr>
4777 #if BOOST_VERSION < 104601
4779 boost::proto::detail::enable_binary<
4781 is_field<field_indirect_const<T,M> >,
4782 field_indirect_const<T,M>,
4783 is_field<field_expr<Expr> >,
4785 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4786 ::impl<const field_indirect_const<T,M>&,
const field_expr<Expr>&>::result_type
const
4790 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4791 ::impl<const field_indirect_const<T,M>&,
const field_expr<Expr>&>() (l, r);
4793 #else // BOOST_VERSION >= 104601
4794 typename boost::proto::detail::enable_binary<
4796 field_domain::proto_grammar,
4798 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<field_expr<Expr> > >,
4801 boost::proto::is_extension<field_indirect_const<T,M> >,
4802 boost::proto::is_extension<field_expr<Expr> >
4806 boost::proto::tag::minus,
4807 field_indirect_const<T,M>
const &,
4808 field_expr<Expr>
const &
4810 operator- (field_indirect_const<T,M>
const &left, field_expr<Expr>
const &right)
4812 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_indirect_const<T,M>
const &, field_expr<Expr>
const &>()(left, right);
4814 #endif // BOOST_VERSION
4815 template<
class T,
class M,
class Expr>
4816 #if BOOST_VERSION < 104601
4818 boost::proto::detail::enable_binary<
4820 is_field<field_expr<Expr> >,
4822 is_field<field_indirect_const<T,M> >,
4823 field_indirect_const<T,M>,
4824 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4825 ::impl<const field_expr<Expr>&,
const field_indirect_const<T,M>&>::result_type
const
4829 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4832 #else // BOOST_VERSION >= 104601
4833 typename boost::proto::detail::enable_binary<
4835 field_domain::proto_grammar,
4837 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_indirect_const<T,M> > >,
4840 boost::proto::is_extension<field_expr<Expr> >,
4841 boost::proto::is_extension<field_indirect_const<T,M> >
4845 boost::proto::tag::minus,
4846 field_expr<Expr>
const &,
4847 field_indirect_const<T,M>
const &
4849 operator- (field_expr<Expr>
const &left, field_indirect_const<T,M>
const &right)
4851 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, field_indirect_const<T,M>
const &>()(left, right);
4853 #endif // BOOST_VERSION
4854 template<
class T,
class M,
class Expr>
4855 #if BOOST_VERSION < 104601
4857 boost::proto::detail::enable_binary<
4859 is_field<field_component<T,M> >,
4860 field_component<T,M>,
4861 is_field<field_expr<Expr> >,
4863 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4864 ::impl<const field_component<T,M>&,
const field_expr<Expr>&>::result_type
const
4868 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4871 #else // BOOST_VERSION >= 104601
4872 typename boost::proto::detail::enable_binary<
4874 field_domain::proto_grammar,
4876 boost::mpl::or_<is_field<field_component<T,M> >, is_field<field_expr<Expr> > >,
4879 boost::proto::is_extension<field_component<T,M> >,
4880 boost::proto::is_extension<field_expr<Expr> >
4884 boost::proto::tag::minus,
4885 field_component<T,M>
const &,
4886 field_expr<Expr>
const &
4888 operator- (field_component<T,M>
const &left, field_expr<Expr>
const &right)
4890 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component<T,M>
const &, field_expr<Expr>
const &>()(left, right);
4892 #endif // BOOST_VERSION
4893 template<
class T,
class M,
class Expr>
4894 #if BOOST_VERSION < 104601
4896 boost::proto::detail::enable_binary<
4898 is_field<field_expr<Expr> >,
4900 is_field<field_component<T,M> >,
4901 field_component<T,M>,
4902 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4903 ::impl<const field_expr<Expr>&,
const field_component<T,M>&>::result_type
const
4907 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4910 #else // BOOST_VERSION >= 104601
4911 typename boost::proto::detail::enable_binary<
4913 field_domain::proto_grammar,
4915 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component<T,M> > >,
4918 boost::proto::is_extension<field_expr<Expr> >,
4919 boost::proto::is_extension<field_component<T,M> >
4923 boost::proto::tag::minus,
4924 field_expr<Expr>
const &,
4925 field_component<T,M>
const &
4927 operator- (field_expr<Expr>
const &left, field_component<T,M>
const &right)
4929 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, field_component<T,M>
const &>()(left, right);
4931 #endif // BOOST_VERSION
4932 template<
class T,
class M,
class Expr>
4933 #if BOOST_VERSION < 104601
4935 boost::proto::detail::enable_binary<
4937 is_field<field_component_const<T,M> >,
4938 field_component_const<T,M>,
4939 is_field<field_expr<Expr> >,
4941 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4942 ::impl<const field_component_const<T,M>&,
const field_expr<Expr>&>::result_type
const
4946 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4947 ::impl<const field_component_const<T,M>&,
const field_expr<Expr>&>() (l, r);
4949 #else // BOOST_VERSION >= 104601
4950 typename boost::proto::detail::enable_binary<
4952 field_domain::proto_grammar,
4954 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<field_expr<Expr> > >,
4957 boost::proto::is_extension<field_component_const<T,M> >,
4958 boost::proto::is_extension<field_expr<Expr> >
4962 boost::proto::tag::minus,
4963 field_component_const<T,M>
const &,
4964 field_expr<Expr>
const &
4966 operator- (field_component_const<T,M>
const &left, field_expr<Expr>
const &right)
4968 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_component_const<T,M>
const &, field_expr<Expr>
const &>()(left, right);
4970 #endif // BOOST_VERSION
4971 template<
class T,
class M,
class Expr>
4972 #if BOOST_VERSION < 104601
4974 boost::proto::detail::enable_binary<
4976 is_field<field_expr<Expr> >,
4978 is_field<field_component_const<T,M> >,
4979 field_component_const<T,M>,
4980 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4981 ::impl<const field_expr<Expr>&,
const field_component_const<T,M>&>::result_type
const
4985 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
4988 #else // BOOST_VERSION >= 104601
4989 typename boost::proto::detail::enable_binary<
4991 field_domain::proto_grammar,
4993 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<field_component_const<T,M> > >,
4996 boost::proto::is_extension<field_expr<Expr> >,
4997 boost::proto::is_extension<field_component_const<T,M> >
5001 boost::proto::tag::minus,
5002 field_expr<Expr>
const &,
5003 field_component_const<T,M>
const &
5005 operator- (field_expr<Expr>
const &left, field_component_const<T,M>
const &right)
5007 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr>
const &, field_component_const<T,M>
const &>()(left, right);
5009 #endif // BOOST_VERSION
5010 template<
class Expr1,
class Expr2>
5011 #if BOOST_VERSION < 104601
5013 boost::proto::detail::enable_binary<
5015 is_field<field_expr<Expr1> >,
5017 is_field<field_expr<Expr2> >,
5019 typename boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
5020 ::impl<const field_expr<Expr1>&,
const field_expr<Expr2>&>::result_type
const
5024 return boost::proto::functional::make_expr<boost::proto::tag::minus, field_domain>
5027 #else // BOOST_VERSION >= 104601
5028 typename boost::proto::detail::enable_binary<
5030 field_domain::proto_grammar,
5032 boost::mpl::or_<is_field<field_expr<Expr1> >, is_field<field_expr<Expr2> > >,
5035 boost::proto::is_extension<field_expr<Expr1> >,
5036 boost::proto::is_extension<field_expr<Expr2> >
5040 boost::proto::tag::minus,
5041 field_expr<Expr1>
const &,
5042 field_expr<Expr2>
const &
5044 operator- (field_expr<Expr1>
const &left, field_expr<Expr2>
const &right)
5046 return boost::proto::detail::make_expr_<boost::proto::tag::minus, field_domain, field_expr<Expr1>
const &, field_expr<Expr2>
const &>()(left, right);
5048 #endif // BOOST_VERSION
5049 template<
class T,
class M>
5050 #if BOOST_VERSION < 104601
5052 boost::proto::detail::enable_binary<
5056 is_field<field_basic<T,M> >,
5058 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5059 ::impl<const int&, const field_basic<T,M>&>::result_type
const
5063 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5064 ::impl<const int&, const field_basic<T,M>&>() (l, r);
5066 #else // BOOST_VERSION >= 104601
5067 typename boost::proto::detail::enable_binary<
5069 field_domain::proto_grammar,
5071 boost::mpl::or_<is_field<int >, is_field<field_basic<T,M> > >,
5074 boost::proto::is_extension<int >,
5075 boost::proto::is_extension<field_basic<T,M> >
5079 boost::proto::tag::multiplies,
5081 field_basic<T,M>
const &
5083 operator* (
int const &left, field_basic<T,M>
const &right)
5085 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_basic<T,M>
const &>()(left, right);
5087 #endif // BOOST_VERSION
5088 template<
class T,
class M>
5089 #if BOOST_VERSION < 104601
5091 boost::proto::detail::enable_binary<
5095 is_field<field_basic<T,M> >,
5097 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5098 ::impl<const T&, const field_basic<T,M>&>::result_type
const
5102 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5103 ::impl<const T&, const field_basic<T,M>&>() (l, r);
5105 #else // BOOST_VERSION >= 104601
5106 typename boost::proto::detail::enable_binary<
5108 field_domain::proto_grammar,
5110 boost::mpl::or_<is_field<T >, is_field<field_basic<T,M> > >,
5113 boost::proto::is_extension<T >,
5114 boost::proto::is_extension<field_basic<T,M> >
5118 boost::proto::tag::multiplies,
5120 field_basic<T,M>
const &
5122 operator* (T
const &left, field_basic<T,M>
const &right)
5124 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_basic<T,M>
const &>()(left, right);
5126 #endif // BOOST_VERSION
5127 template<
class T,
class M>
5128 #if BOOST_VERSION < 104601
5130 boost::proto::detail::enable_binary<
5134 is_field<field_indirect<T,M> >,
5135 field_indirect<T,M>,
5136 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5137 ::impl<const int&, const field_indirect<T,M>&>::result_type
const
5141 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5142 ::impl<const int&, const field_indirect<T,M>&>() (l, r);
5144 #else // BOOST_VERSION >= 104601
5145 typename boost::proto::detail::enable_binary<
5147 field_domain::proto_grammar,
5149 boost::mpl::or_<is_field<int >, is_field<field_indirect<T,M> > >,
5152 boost::proto::is_extension<int >,
5153 boost::proto::is_extension<field_indirect<T,M> >
5157 boost::proto::tag::multiplies,
5159 field_indirect<T,M>
const &
5161 operator* (
int const &left, field_indirect<T,M>
const &right)
5163 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_indirect<T,M>
const &>()(left, right);
5165 #endif // BOOST_VERSION
5166 template<
class T,
class M>
5167 #if BOOST_VERSION < 104601
5169 boost::proto::detail::enable_binary<
5173 is_field<field_indirect<T,M> >,
5174 field_indirect<T,M>,
5175 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5176 ::impl<const T&, const field_indirect<T,M>&>::result_type
const
5180 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5181 ::impl<const T&, const field_indirect<T,M>&>() (l, r);
5183 #else // BOOST_VERSION >= 104601
5184 typename boost::proto::detail::enable_binary<
5186 field_domain::proto_grammar,
5188 boost::mpl::or_<is_field<T >, is_field<field_indirect<T,M> > >,
5191 boost::proto::is_extension<T >,
5192 boost::proto::is_extension<field_indirect<T,M> >
5196 boost::proto::tag::multiplies,
5198 field_indirect<T,M>
const &
5200 operator* (T
const &left, field_indirect<T,M>
const &right)
5202 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_indirect<T,M>
const &>()(left, right);
5204 #endif // BOOST_VERSION
5205 template<
class T,
class M>
5206 #if BOOST_VERSION < 104601
5208 boost::proto::detail::enable_binary<
5212 is_field<field_indirect_const<T,M> >,
5213 field_indirect_const<T,M>,
5214 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5215 ::impl<const int&, const field_indirect_const<T,M>&>::result_type
const
5219 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5220 ::impl<const int&, const field_indirect_const<T,M>&>() (l, r);
5222 #else // BOOST_VERSION >= 104601
5223 typename boost::proto::detail::enable_binary<
5225 field_domain::proto_grammar,
5227 boost::mpl::or_<is_field<int >, is_field<field_indirect_const<T,M> > >,
5230 boost::proto::is_extension<int >,
5231 boost::proto::is_extension<field_indirect_const<T,M> >
5235 boost::proto::tag::multiplies,
5237 field_indirect_const<T,M>
const &
5239 operator* (
int const &left, field_indirect_const<T,M>
const &right)
5241 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_indirect_const<T,M>
const &>()(left, right);
5243 #endif // BOOST_VERSION
5244 template<
class T,
class M>
5245 #if BOOST_VERSION < 104601
5247 boost::proto::detail::enable_binary<
5251 is_field<field_indirect_const<T,M> >,
5252 field_indirect_const<T,M>,
5253 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5254 ::impl<const T&, const field_indirect_const<T,M>&>::result_type
const
5258 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5259 ::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
5261 #else // BOOST_VERSION >= 104601
5262 typename boost::proto::detail::enable_binary<
5264 field_domain::proto_grammar,
5266 boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
5269 boost::proto::is_extension<T >,
5270 boost::proto::is_extension<field_indirect_const<T,M> >
5274 boost::proto::tag::multiplies,
5276 field_indirect_const<T,M>
const &
5278 operator* (T
const &left, field_indirect_const<T,M>
const &right)
5280 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_indirect_const<T,M>
const &>()(left, right);
5282 #endif // BOOST_VERSION
5283 template<
class T,
class M>
5284 #if BOOST_VERSION < 104601
5286 boost::proto::detail::enable_binary<
5290 is_field<field_component<T,M> >,
5291 field_component<T,M>,
5292 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5293 ::impl<const int&, const field_component<T,M>&>::result_type
const
5297 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5298 ::impl<const int&, const field_component<T,M>&>() (l, r);
5300 #else // BOOST_VERSION >= 104601
5301 typename boost::proto::detail::enable_binary<
5303 field_domain::proto_grammar,
5305 boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
5308 boost::proto::is_extension<int >,
5309 boost::proto::is_extension<field_component<T,M> >
5313 boost::proto::tag::multiplies,
5315 field_component<T,M>
const &
5317 operator* (
int const &left, field_component<T,M>
const &right)
5319 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_component<T,M>
const &>()(left, right);
5321 #endif // BOOST_VERSION
5322 template<
class T,
class M>
5323 #if BOOST_VERSION < 104601
5325 boost::proto::detail::enable_binary<
5329 is_field<field_component<T,M> >,
5330 field_component<T,M>,
5331 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5332 ::impl<const T&, const field_component<T,M>&>::result_type
const
5336 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5337 ::impl<const T&, const field_component<T,M>&>() (l, r);
5339 #else // BOOST_VERSION >= 104601
5340 typename boost::proto::detail::enable_binary<
5342 field_domain::proto_grammar,
5344 boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
5347 boost::proto::is_extension<T >,
5348 boost::proto::is_extension<field_component<T,M> >
5352 boost::proto::tag::multiplies,
5354 field_component<T,M>
const &
5356 operator* (T
const &left, field_component<T,M>
const &right)
5358 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_component<T,M>
const &>()(left, right);
5360 #endif // BOOST_VERSION
5361 template<
class T,
class M>
5362 #if BOOST_VERSION < 104601
5364 boost::proto::detail::enable_binary<
5368 is_field<field_component_const<T,M> >,
5369 field_component_const<T,M>,
5370 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5371 ::impl<const int&, const field_component_const<T,M>&>::result_type
const
5375 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5376 ::impl<const int&, const field_component_const<T,M>&>() (l, r);
5378 #else // BOOST_VERSION >= 104601
5379 typename boost::proto::detail::enable_binary<
5381 field_domain::proto_grammar,
5383 boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
5386 boost::proto::is_extension<int >,
5387 boost::proto::is_extension<field_component_const<T,M> >
5391 boost::proto::tag::multiplies,
5393 field_component_const<T,M>
const &
5395 operator* (
int const &left, field_component_const<T,M>
const &right)
5397 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_component_const<T,M>
const &>()(left, right);
5399 #endif // BOOST_VERSION
5400 template<
class T,
class M>
5401 #if BOOST_VERSION < 104601
5403 boost::proto::detail::enable_binary<
5407 is_field<field_component_const<T,M> >,
5408 field_component_const<T,M>,
5409 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5410 ::impl<const T&, const field_component_const<T,M>&>::result_type
const
5414 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5415 ::impl<const T&, const field_component_const<T,M>&>() (l, r);
5417 #else // BOOST_VERSION >= 104601
5418 typename boost::proto::detail::enable_binary<
5420 field_domain::proto_grammar,
5422 boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
5425 boost::proto::is_extension<T >,
5426 boost::proto::is_extension<field_component_const<T,M> >
5430 boost::proto::tag::multiplies,
5432 field_component_const<T,M>
const &
5434 operator* (T
const &left, field_component_const<T,M>
const &right)
5436 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_component_const<T,M>
const &>()(left, right);
5438 #endif // BOOST_VERSION
5439 template<
class T,
class M>
5440 #if BOOST_VERSION < 104601
5442 boost::proto::detail::enable_binary<
5444 is_field<field_basic<T,M> >,
5448 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5449 ::impl<const field_basic<T,M>&,
const int&>::result_type
const
5453 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5454 ::impl<const field_basic<T,M>&,
const int&>() (l, r);
5456 #else // BOOST_VERSION >= 104601
5457 typename boost::proto::detail::enable_binary<
5459 field_domain::proto_grammar,
5461 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<int > >,
5464 boost::proto::is_extension<field_basic<T,M> >,
5465 boost::proto::is_extension<int >
5469 boost::proto::tag::multiplies,
5470 field_basic<T,M>
const &,
5473 operator* (field_basic<T,M>
const &left,
int const &right)
5475 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_basic<T,M>
const &,
int const &>()(left, right);
5477 #endif // BOOST_VERSION
5478 template<
class T,
class M>
5479 #if BOOST_VERSION < 104601
5481 boost::proto::detail::enable_binary<
5483 is_field<field_basic<T,M> >,
5487 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5488 ::impl<const field_basic<T,M>&,
const T&>::result_type
const
5492 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5493 ::impl<const field_basic<T,M>&,
const T&>() (l, r);
5495 #else // BOOST_VERSION >= 104601
5496 typename boost::proto::detail::enable_binary<
5498 field_domain::proto_grammar,
5500 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<T > >,
5503 boost::proto::is_extension<field_basic<T,M> >,
5504 boost::proto::is_extension<T >
5508 boost::proto::tag::multiplies,
5509 field_basic<T,M>
const &,
5512 operator* (field_basic<T,M>
const &left, T
const &right)
5514 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_basic<T,M>
const &, T
const &>()(left, right);
5516 #endif // BOOST_VERSION
5517 template<
class T,
class M>
5518 #if BOOST_VERSION < 104601
5520 boost::proto::detail::enable_binary<
5522 is_field<field_indirect<T,M> >,
5523 field_indirect<T,M>,
5526 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5527 ::impl<const field_indirect<T,M>&,
const int&>::result_type
const
5531 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5532 ::impl<const field_indirect<T,M>&,
const int&>() (l, r);
5534 #else // BOOST_VERSION >= 104601
5535 typename boost::proto::detail::enable_binary<
5537 field_domain::proto_grammar,
5539 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<int > >,
5542 boost::proto::is_extension<field_indirect<T,M> >,
5543 boost::proto::is_extension<int >
5547 boost::proto::tag::multiplies,
5548 field_indirect<T,M>
const &,
5551 operator* (field_indirect<T,M>
const &left,
int const &right)
5553 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect<T,M>
const &,
int const &>()(left, right);
5555 #endif // BOOST_VERSION
5556 template<
class T,
class M>
5557 #if BOOST_VERSION < 104601
5559 boost::proto::detail::enable_binary<
5561 is_field<field_indirect<T,M> >,
5562 field_indirect<T,M>,
5565 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5566 ::impl<const field_indirect<T,M>&,
const T&>::result_type
const
5570 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5571 ::impl<const field_indirect<T,M>&,
const T&>() (l, r);
5573 #else // BOOST_VERSION >= 104601
5574 typename boost::proto::detail::enable_binary<
5576 field_domain::proto_grammar,
5578 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<T > >,
5581 boost::proto::is_extension<field_indirect<T,M> >,
5582 boost::proto::is_extension<T >
5586 boost::proto::tag::multiplies,
5587 field_indirect<T,M>
const &,
5590 operator* (field_indirect<T,M>
const &left, T
const &right)
5592 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect<T,M>
const &, T
const &>()(left, right);
5594 #endif // BOOST_VERSION
5595 template<
class T,
class M>
5596 #if BOOST_VERSION < 104601
5598 boost::proto::detail::enable_binary<
5600 is_field<field_indirect_const<T,M> >,
5601 field_indirect_const<T,M>,
5604 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5605 ::impl<const field_indirect_const<T,M>&,
const int&>::result_type
const
5609 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5610 ::impl<const field_indirect_const<T,M>&,
const int&>() (l, r);
5612 #else // BOOST_VERSION >= 104601
5613 typename boost::proto::detail::enable_binary<
5615 field_domain::proto_grammar,
5617 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<int > >,
5620 boost::proto::is_extension<field_indirect_const<T,M> >,
5621 boost::proto::is_extension<int >
5625 boost::proto::tag::multiplies,
5626 field_indirect_const<T,M>
const &,
5629 operator* (field_indirect_const<T,M>
const &left,
int const &right)
5631 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T,M>
const &,
int const &>()(left, right);
5633 #endif // BOOST_VERSION
5634 template<
class T,
class M>
5635 #if BOOST_VERSION < 104601
5637 boost::proto::detail::enable_binary<
5639 is_field<field_indirect_const<T,M> >,
5640 field_indirect_const<T,M>,
5643 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5644 ::impl<const field_indirect_const<T,M>&,
const T&>::result_type
const
5648 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5649 ::impl<const field_indirect_const<T,M>&,
const T&>() (l, r);
5651 #else // BOOST_VERSION >= 104601
5652 typename boost::proto::detail::enable_binary<
5654 field_domain::proto_grammar,
5656 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
5659 boost::proto::is_extension<field_indirect_const<T,M> >,
5660 boost::proto::is_extension<T >
5664 boost::proto::tag::multiplies,
5665 field_indirect_const<T,M>
const &,
5668 operator* (field_indirect_const<T,M>
const &left, T
const &right)
5670 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_indirect_const<T,M>
const &, T
const &>()(left, right);
5672 #endif // BOOST_VERSION
5673 template<
class T,
class M>
5674 #if BOOST_VERSION < 104601
5676 boost::proto::detail::enable_binary<
5678 is_field<field_component<T,M> >,
5679 field_component<T,M>,
5682 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5683 ::impl<const field_component<T,M>&,
const int&>::result_type
const
5687 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5688 ::impl<const field_component<T,M>&,
const int&>() (l, r);
5690 #else // BOOST_VERSION >= 104601
5691 typename boost::proto::detail::enable_binary<
5693 field_domain::proto_grammar,
5695 boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
5698 boost::proto::is_extension<field_component<T,M> >,
5699 boost::proto::is_extension<int >
5703 boost::proto::tag::multiplies,
5704 field_component<T,M>
const &,
5707 operator* (field_component<T,M>
const &left,
int const &right)
5709 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T,M>
const &,
int const &>()(left, right);
5711 #endif // BOOST_VERSION
5712 template<
class T,
class M>
5713 #if BOOST_VERSION < 104601
5715 boost::proto::detail::enable_binary<
5717 is_field<field_component<T,M> >,
5718 field_component<T,M>,
5721 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5722 ::impl<const field_component<T,M>&,
const T&>::result_type
const
5726 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5727 ::impl<const field_component<T,M>&,
const T&>() (l, r);
5729 #else // BOOST_VERSION >= 104601
5730 typename boost::proto::detail::enable_binary<
5732 field_domain::proto_grammar,
5734 boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
5737 boost::proto::is_extension<field_component<T,M> >,
5738 boost::proto::is_extension<T >
5742 boost::proto::tag::multiplies,
5743 field_component<T,M>
const &,
5746 operator* (field_component<T,M>
const &left, T
const &right)
5748 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component<T,M>
const &, T
const &>()(left, right);
5750 #endif // BOOST_VERSION
5751 template<
class T,
class M>
5752 #if BOOST_VERSION < 104601
5754 boost::proto::detail::enable_binary<
5756 is_field<field_component_const<T,M> >,
5757 field_component_const<T,M>,
5760 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5761 ::impl<const field_component_const<T,M>&,
const int&>::result_type
const
5765 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5766 ::impl<const field_component_const<T,M>&,
const int&>() (l, r);
5768 #else // BOOST_VERSION >= 104601
5769 typename boost::proto::detail::enable_binary<
5771 field_domain::proto_grammar,
5773 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<int > >,
5776 boost::proto::is_extension<field_component_const<T,M> >,
5777 boost::proto::is_extension<int >
5781 boost::proto::tag::multiplies,
5782 field_component_const<T,M>
const &,
5785 operator* (field_component_const<T,M>
const &left,
int const &right)
5787 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T,M>
const &,
int const &>()(left, right);
5789 #endif // BOOST_VERSION
5790 template<
class T,
class M>
5791 #if BOOST_VERSION < 104601
5793 boost::proto::detail::enable_binary<
5795 is_field<field_component_const<T,M> >,
5796 field_component_const<T,M>,
5799 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5800 ::impl<const field_component_const<T,M>&,
const T&>::result_type
const
5804 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5805 ::impl<const field_component_const<T,M>&,
const T&>() (l, r);
5807 #else // BOOST_VERSION >= 104601
5808 typename boost::proto::detail::enable_binary<
5810 field_domain::proto_grammar,
5812 boost::mpl::or_<is_field<field_component_const<T,M> >, is_field<T > >,
5815 boost::proto::is_extension<field_component_const<T,M> >,
5816 boost::proto::is_extension<T >
5820 boost::proto::tag::multiplies,
5821 field_component_const<T,M>
const &,
5824 operator* (field_component_const<T,M>
const &left, T
const &right)
5826 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_component_const<T,M>
const &, T
const &>()(left, right);
5828 #endif // BOOST_VERSION
5829 template<
class Expr>
5830 #if BOOST_VERSION < 104601
5832 boost::proto::detail::enable_binary<
5836 is_field<field_expr<Expr> >,
5838 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5839 ::impl<const int&, const field_expr<Expr>&>::result_type
const
5843 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5844 ::impl<const int&, const field_expr<Expr>&>() (l, r);
5846 #else // BOOST_VERSION >= 104601
5847 typename boost::proto::detail::enable_binary<
5849 field_domain::proto_grammar,
5851 boost::mpl::or_<is_field<int >, is_field<field_expr<Expr> > >,
5854 boost::proto::is_extension<int >,
5855 boost::proto::is_extension<field_expr<Expr> >
5859 boost::proto::tag::multiplies,
5861 field_expr<Expr>
const &
5863 operator* (
int const &left, field_expr<Expr>
const &right)
5865 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, int const &, field_expr<Expr>
const &>()(left, right);
5867 #endif // BOOST_VERSION
5868 template<
class Expr>
5869 #if BOOST_VERSION < 104601
5871 boost::proto::detail::enable_binary<
5873 is_field<field_expr<Expr> >,
5877 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5878 ::impl<const field_expr<Expr>&,
const int&>::result_type
const
5882 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5883 ::impl<const field_expr<Expr>&,
const int&>() (l, r);
5885 #else // BOOST_VERSION >= 104601
5886 typename boost::proto::detail::enable_binary<
5888 field_domain::proto_grammar,
5890 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<int > >,
5893 boost::proto::is_extension<field_expr<Expr> >,
5894 boost::proto::is_extension<int >
5898 boost::proto::tag::multiplies,
5899 field_expr<Expr>
const &,
5902 operator* (field_expr<Expr>
const &left,
int const &right)
5904 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_expr<Expr>
const &,
int const &>()(left, right);
5906 #endif // BOOST_VERSION
5907 template<
class T,
class Expr>
5908 #if BOOST_VERSION < 104601
5910 boost::proto::detail::enable_binary<
5914 is_field<field_expr<Expr> >,
5916 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5917 ::impl<const T&, const field_expr<Expr>&>::result_type
const
5921 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5922 ::impl<const T&, const field_expr<Expr>&>() (l, r);
5924 #else // BOOST_VERSION >= 104601
5925 typename boost::proto::detail::enable_binary<
5927 field_domain::proto_grammar,
5929 boost::mpl::or_<is_field<T >, is_field<field_expr<Expr> > >,
5932 boost::proto::is_extension<T >,
5933 boost::proto::is_extension<field_expr<Expr> >
5937 boost::proto::tag::multiplies,
5939 field_expr<Expr>
const &
5941 operator* (T
const &left, field_expr<Expr>
const &right)
5943 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, T const &, field_expr<Expr>
const &>()(left, right);
5945 #endif // BOOST_VERSION
5946 template<
class T,
class Expr>
5947 #if BOOST_VERSION < 104601
5949 boost::proto::detail::enable_binary<
5951 is_field<field_expr<Expr> >,
5955 typename boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5956 ::impl<const field_expr<Expr>&,
const T&>::result_type
const
5960 return boost::proto::functional::make_expr<boost::proto::tag::multiplies, field_domain>
5961 ::impl<const field_expr<Expr>&,
const T&>() (l, r);
5963 #else // BOOST_VERSION >= 104601
5964 typename boost::proto::detail::enable_binary<
5966 field_domain::proto_grammar,
5968 boost::mpl::or_<is_field<field_expr<Expr> >, is_field<T > >,
5971 boost::proto::is_extension<field_expr<Expr> >,
5972 boost::proto::is_extension<T >
5976 boost::proto::tag::multiplies,
5977 field_expr<Expr>
const &,
5980 operator* (field_expr<Expr>
const &left, T
const &right)
5982 return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, field_domain, field_expr<Expr>
const &, T
const &>()(left, right);
5984 #endif // BOOST_VERSION
5985 template<
class T,
class M>
5986 #if BOOST_VERSION < 104601
5988 boost::proto::detail::enable_binary<
5992 is_field<field_basic<T,M> >,
5994 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
5995 ::impl<const int&, const field_basic<T,M>&>::result_type
const
5999 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6000 ::impl<const int&, const field_basic<T,M>&>() (l, r);
6002 #else // BOOST_VERSION >= 104601
6003 typename boost::proto::detail::enable_binary<
6005 field_domain::proto_grammar,
6007 boost::mpl::or_<is_field<int >, is_field<field_basic<T,M> > >,
6010 boost::proto::is_extension<int >,
6011 boost::proto::is_extension<field_basic<T,M> >
6015 boost::proto::tag::divides,
6017 field_basic<T,M>
const &
6019 operator/ (
int const &left, field_basic<T,M>
const &right)
6021 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_basic<T,M>
const &>()(left, right);
6023 #endif // BOOST_VERSION
6024 template<
class T,
class M>
6025 #if BOOST_VERSION < 104601
6027 boost::proto::detail::enable_binary<
6031 is_field<field_basic<T,M> >,
6033 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6034 ::impl<const T&, const field_basic<T,M>&>::result_type
const
6038 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6039 ::impl<const T&, const field_basic<T,M>&>() (l, r);
6041 #else // BOOST_VERSION >= 104601
6042 typename boost::proto::detail::enable_binary<
6044 field_domain::proto_grammar,
6046 boost::mpl::or_<is_field<T >, is_field<field_basic<T,M> > >,
6049 boost::proto::is_extension<T >,
6050 boost::proto::is_extension<field_basic<T,M> >
6054 boost::proto::tag::divides,
6056 field_basic<T,M>
const &
6058 operator/ (T
const &left, field_basic<T,M>
const &right)
6060 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_basic<T,M>
const &>()(left, right);
6062 #endif // BOOST_VERSION
6063 template<
class T,
class M>
6064 #if BOOST_VERSION < 104601
6066 boost::proto::detail::enable_binary<
6070 is_field<field_indirect<T,M> >,
6071 field_indirect<T,M>,
6072 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6073 ::impl<const int&, const field_indirect<T,M>&>::result_type
const
6077 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6078 ::impl<const int&, const field_indirect<T,M>&>() (l, r);
6080 #else // BOOST_VERSION >= 104601
6081 typename boost::proto::detail::enable_binary<
6083 field_domain::proto_grammar,
6085 boost::mpl::or_<is_field<int >, is_field<field_indirect<T,M> > >,
6088 boost::proto::is_extension<int >,
6089 boost::proto::is_extension<field_indirect<T,M> >
6093 boost::proto::tag::divides,
6095 field_indirect<T,M>
const &
6097 operator/ (
int const &left, field_indirect<T,M>
const &right)
6099 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_indirect<T,M>
const &>()(left, right);
6101 #endif // BOOST_VERSION
6102 template<
class T,
class M>
6103 #if BOOST_VERSION < 104601
6105 boost::proto::detail::enable_binary<
6109 is_field<field_indirect<T,M> >,
6110 field_indirect<T,M>,
6111 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6112 ::impl<const T&, const field_indirect<T,M>&>::result_type
const
6116 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6117 ::impl<const T&, const field_indirect<T,M>&>() (l, r);
6119 #else // BOOST_VERSION >= 104601
6120 typename boost::proto::detail::enable_binary<
6122 field_domain::proto_grammar,
6124 boost::mpl::or_<is_field<T >, is_field<field_indirect<T,M> > >,
6127 boost::proto::is_extension<T >,
6128 boost::proto::is_extension<field_indirect<T,M> >
6132 boost::proto::tag::divides,
6134 field_indirect<T,M>
const &
6136 operator/ (T
const &left, field_indirect<T,M>
const &right)
6138 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_indirect<T,M>
const &>()(left, right);
6140 #endif // BOOST_VERSION
6141 template<
class T,
class M>
6142 #if BOOST_VERSION < 104601
6144 boost::proto::detail::enable_binary<
6148 is_field<field_indirect_const<T,M> >,
6149 field_indirect_const<T,M>,
6150 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6151 ::impl<const int&, const field_indirect_const<T,M>&>::result_type
const
6155 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6156 ::impl<const int&, const field_indirect_const<T,M>&>() (l, r);
6158 #else // BOOST_VERSION >= 104601
6159 typename boost::proto::detail::enable_binary<
6161 field_domain::proto_grammar,
6163 boost::mpl::or_<is_field<int >, is_field<field_indirect_const<T,M> > >,
6166 boost::proto::is_extension<int >,
6167 boost::proto::is_extension<field_indirect_const<T,M> >
6171 boost::proto::tag::divides,
6173 field_indirect_const<T,M>
const &
6175 operator/ (
int const &left, field_indirect_const<T,M>
const &right)
6177 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_indirect_const<T,M>
const &>()(left, right);
6179 #endif // BOOST_VERSION
6180 template<
class T,
class M>
6181 #if BOOST_VERSION < 104601
6183 boost::proto::detail::enable_binary<
6187 is_field<field_indirect_const<T,M> >,
6188 field_indirect_const<T,M>,
6189 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6190 ::impl<const T&, const field_indirect_const<T,M>&>::result_type
const
6194 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6195 ::impl<const T&, const field_indirect_const<T,M>&>() (l, r);
6197 #else // BOOST_VERSION >= 104601
6198 typename boost::proto::detail::enable_binary<
6200 field_domain::proto_grammar,
6202 boost::mpl::or_<is_field<T >, is_field<field_indirect_const<T,M> > >,
6205 boost::proto::is_extension<T >,
6206 boost::proto::is_extension<field_indirect_const<T,M> >
6210 boost::proto::tag::divides,
6212 field_indirect_const<T,M>
const &
6214 operator/ (T
const &left, field_indirect_const<T,M>
const &right)
6216 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_indirect_const<T,M>
const &>()(left, right);
6218 #endif // BOOST_VERSION
6219 template<
class T,
class M>
6220 #if BOOST_VERSION < 104601
6222 boost::proto::detail::enable_binary<
6226 is_field<field_component<T,M> >,
6227 field_component<T,M>,
6228 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6229 ::impl<const int&, const field_component<T,M>&>::result_type
const
6233 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6234 ::impl<const int&, const field_component<T,M>&>() (l, r);
6236 #else // BOOST_VERSION >= 104601
6237 typename boost::proto::detail::enable_binary<
6239 field_domain::proto_grammar,
6241 boost::mpl::or_<is_field<int >, is_field<field_component<T,M> > >,
6244 boost::proto::is_extension<int >,
6245 boost::proto::is_extension<field_component<T,M> >
6249 boost::proto::tag::divides,
6251 field_component<T,M>
const &
6253 operator/ (
int const &left, field_component<T,M>
const &right)
6255 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_component<T,M>
const &>()(left, right);
6257 #endif // BOOST_VERSION
6258 template<
class T,
class M>
6259 #if BOOST_VERSION < 104601
6261 boost::proto::detail::enable_binary<
6265 is_field<field_component<T,M> >,
6266 field_component<T,M>,
6267 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6268 ::impl<const T&, const field_component<T,M>&>::result_type
const
6272 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6273 ::impl<const T&, const field_component<T,M>&>() (l, r);
6275 #else // BOOST_VERSION >= 104601
6276 typename boost::proto::detail::enable_binary<
6278 field_domain::proto_grammar,
6280 boost::mpl::or_<is_field<T >, is_field<field_component<T,M> > >,
6283 boost::proto::is_extension<T >,
6284 boost::proto::is_extension<field_component<T,M> >
6288 boost::proto::tag::divides,
6290 field_component<T,M>
const &
6292 operator/ (T
const &left, field_component<T,M>
const &right)
6294 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_component<T,M>
const &>()(left, right);
6296 #endif // BOOST_VERSION
6297 template<
class T,
class M>
6298 #if BOOST_VERSION < 104601
6300 boost::proto::detail::enable_binary<
6304 is_field<field_component_const<T,M> >,
6305 field_component_const<T,M>,
6306 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6307 ::impl<const int&, const field_component_const<T,M>&>::result_type
const
6311 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6312 ::impl<const int&, const field_component_const<T,M>&>() (l, r);
6314 #else // BOOST_VERSION >= 104601
6315 typename boost::proto::detail::enable_binary<
6317 field_domain::proto_grammar,
6319 boost::mpl::or_<is_field<int >, is_field<field_component_const<T,M> > >,
6322 boost::proto::is_extension<int >,
6323 boost::proto::is_extension<field_component_const<T,M> >
6327 boost::proto::tag::divides,
6329 field_component_const<T,M>
const &
6331 operator/ (
int const &left, field_component_const<T,M>
const &right)
6333 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, int const &, field_component_const<T,M>
const &>()(left, right);
6335 #endif // BOOST_VERSION
6336 template<
class T,
class M>
6337 #if BOOST_VERSION < 104601
6339 boost::proto::detail::enable_binary<
6343 is_field<field_component_const<T,M> >,
6344 field_component_const<T,M>,
6345 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6346 ::impl<const T&, const field_component_const<T,M>&>::result_type
const
6350 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6351 ::impl<const T&, const field_component_const<T,M>&>() (l, r);
6353 #else // BOOST_VERSION >= 104601
6354 typename boost::proto::detail::enable_binary<
6356 field_domain::proto_grammar,
6358 boost::mpl::or_<is_field<T >, is_field<field_component_const<T,M> > >,
6361 boost::proto::is_extension<T >,
6362 boost::proto::is_extension<field_component_const<T,M> >
6366 boost::proto::tag::divides,
6368 field_component_const<T,M>
const &
6370 operator/ (T
const &left, field_component_const<T,M>
const &right)
6372 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, T const &, field_component_const<T,M>
const &>()(left, right);
6374 #endif // BOOST_VERSION
6375 template<
class T,
class M>
6376 #if BOOST_VERSION < 104601
6378 boost::proto::detail::enable_binary<
6380 is_field<field_basic<T,M> >,
6384 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6385 ::impl<const field_basic<T,M>&,
const int&>::result_type
const
6389 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6390 ::impl<const field_basic<T,M>&,
const int&>() (l, r);
6392 #else // BOOST_VERSION >= 104601
6393 typename boost::proto::detail::enable_binary<
6395 field_domain::proto_grammar,
6397 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<int > >,
6400 boost::proto::is_extension<field_basic<T,M> >,
6401 boost::proto::is_extension<int >
6405 boost::proto::tag::divides,
6406 field_basic<T,M>
const &,
6409 operator/ (field_basic<T,M>
const &left,
int const &right)
6411 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_basic<T,M>
const &,
int const &>()(left, right);
6413 #endif // BOOST_VERSION
6414 template<
class T,
class M>
6415 #if BOOST_VERSION < 104601
6417 boost::proto::detail::enable_binary<
6419 is_field<field_basic<T,M> >,
6423 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6424 ::impl<const field_basic<T,M>&,
const T&>::result_type
const
6428 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6429 ::impl<const field_basic<T,M>&,
const T&>() (l, r);
6431 #else // BOOST_VERSION >= 104601
6432 typename boost::proto::detail::enable_binary<
6434 field_domain::proto_grammar,
6436 boost::mpl::or_<is_field<field_basic<T,M> >, is_field<T > >,
6439 boost::proto::is_extension<field_basic<T,M> >,
6440 boost::proto::is_extension<T >
6444 boost::proto::tag::divides,
6445 field_basic<T,M>
const &,
6448 operator/ (field_basic<T,M>
const &left, T
const &right)
6450 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_basic<T,M>
const &, T
const &>()(left, right);
6452 #endif // BOOST_VERSION
6453 template<
class T,
class M>
6454 #if BOOST_VERSION < 104601
6456 boost::proto::detail::enable_binary<
6458 is_field<field_indirect<T,M> >,
6459 field_indirect<T,M>,
6462 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6463 ::impl<const field_indirect<T,M>&,
const int&>::result_type
const
6467 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6468 ::impl<const field_indirect<T,M>&,
const int&>() (l, r);
6470 #else // BOOST_VERSION >= 104601
6471 typename boost::proto::detail::enable_binary<
6473 field_domain::proto_grammar,
6475 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<int > >,
6478 boost::proto::is_extension<field_indirect<T,M> >,
6479 boost::proto::is_extension<int >
6483 boost::proto::tag::divides,
6484 field_indirect<T,M>
const &,
6487 operator/ (field_indirect<T,M>
const &left,
int const &right)
6489 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect<T,M>
const &,
int const &>()(left, right);
6491 #endif // BOOST_VERSION
6492 template<
class T,
class M>
6493 #if BOOST_VERSION < 104601
6495 boost::proto::detail::enable_binary<
6497 is_field<field_indirect<T,M> >,
6498 field_indirect<T,M>,
6501 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6502 ::impl<const field_indirect<T,M>&,
const T&>::result_type
const
6506 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6507 ::impl<const field_indirect<T,M>&,
const T&>() (l, r);
6509 #else // BOOST_VERSION >= 104601
6510 typename boost::proto::detail::enable_binary<
6512 field_domain::proto_grammar,
6514 boost::mpl::or_<is_field<field_indirect<T,M> >, is_field<T > >,
6517 boost::proto::is_extension<field_indirect<T,M> >,
6518 boost::proto::is_extension<T >
6522 boost::proto::tag::divides,
6523 field_indirect<T,M>
const &,
6526 operator/ (field_indirect<T,M>
const &left, T
const &right)
6528 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect<T,M>
const &, T
const &>()(left, right);
6530 #endif // BOOST_VERSION
6531 template<
class T,
class M>
6532 #if BOOST_VERSION < 104601
6534 boost::proto::detail::enable_binary<
6536 is_field<field_indirect_const<T,M> >,
6537 field_indirect_const<T,M>,
6540 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6541 ::impl<const field_indirect_const<T,M>&,
const int&>::result_type
const
6545 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6546 ::impl<const field_indirect_const<T,M>&,
const int&>() (l, r);
6548 #else // BOOST_VERSION >= 104601
6549 typename boost::proto::detail::enable_binary<
6551 field_domain::proto_grammar,
6553 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<int > >,
6556 boost::proto::is_extension<field_indirect_const<T,M> >,
6557 boost::proto::is_extension<int >
6561 boost::proto::tag::divides,
6562 field_indirect_const<T,M>
const &,
6565 operator/ (field_indirect_const<T,M>
const &left,
int const &right)
6567 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T,M>
const &,
int const &>()(left, right);
6569 #endif // BOOST_VERSION
6570 template<
class T,
class M>
6571 #if BOOST_VERSION < 104601
6573 boost::proto::detail::enable_binary<
6575 is_field<field_indirect_const<T,M> >,
6576 field_indirect_const<T,M>,
6579 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6580 ::impl<const field_indirect_const<T,M>&,
const T&>::result_type
const
6584 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6585 ::impl<const field_indirect_const<T,M>&,
const T&>() (l, r);
6587 #else // BOOST_VERSION >= 104601
6588 typename boost::proto::detail::enable_binary<
6590 field_domain::proto_grammar,
6592 boost::mpl::or_<is_field<field_indirect_const<T,M> >, is_field<T > >,
6595 boost::proto::is_extension<field_indirect_const<T,M> >,
6596 boost::proto::is_extension<T >
6600 boost::proto::tag::divides,
6601 field_indirect_const<T,M>
const &,
6604 operator/ (field_indirect_const<T,M>
const &left, T
const &right)
6606 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_indirect_const<T,M>
const &, T
const &>()(left, right);
6608 #endif // BOOST_VERSION
6609 template<
class T,
class M>
6610 #if BOOST_VERSION < 104601
6612 boost::proto::detail::enable_binary<
6614 is_field<field_component<T,M> >,
6615 field_component<T,M>,
6618 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6619 ::impl<const field_component<T,M>&,
const int&>::result_type
const
6623 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6624 ::impl<const field_component<T,M>&,
const int&>() (l, r);
6626 #else // BOOST_VERSION >= 104601
6627 typename boost::proto::detail::enable_binary<
6629 field_domain::proto_grammar,
6631 boost::mpl::or_<is_field<field_component<T,M> >, is_field<int > >,
6634 boost::proto::is_extension<field_component<T,M> >,
6635 boost::proto::is_extension<int >
6639 boost::proto::tag::divides,
6640 field_component<T,M>
const &,
6643 operator/ (field_component<T,M>
const &left,
int const &right)
6645 return boost::proto::detail::make_expr_<boost::proto::tag::divides, field_domain, field_component<T,M>
const &,
int const &>()(left, right);
6647 #endif // BOOST_VERSION
6648 template<
class T,
class M>
6649 #if BOOST_VERSION < 104601
6651 boost::proto::detail::enable_binary<
6653 is_field<field_component<T,M> >,
6654 field_component<T,M>,
6657 typename boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6658 ::impl<const field_component<T,M>&,
const T&>::result_type
const
6662 return boost::proto::functional::make_expr<boost::proto::tag::divides, field_domain>
6663 ::impl<const field_component<T,M>&,
const T&>() (l, r);
6665 #else // BOOST_VERSION >= 104601
6666 typename boost::proto::detail::enable_binary<
6668 field_domain::proto_grammar,
6670 boost::mpl::or_<is_field<field_component<T,M> >, is_field<T > >,
6673 boost::proto::is_extension<field_component<T,M> >,
6674 boost::proto::is_extension<T >
6678 boost::proto::tag::divides,
6679 field_component<T,M>
const &,