34
34
// date: 20 march 2011
36
#include "rheolef/promote.h"
36
37
#include "rheolef/vec_expr.h"
37
#include "rheolef/promote.h"
38
38
namespace rheolef {
39
39
template<class T, class M>
40
typename boost::proto::detail::enable_unary<
44
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
45
::impl<const vec<T,M>&>::result_type
47
operator+ (const vec<T,M>& arg)
49
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
50
::impl<const vec<T,M>&>()(arg);
53
typename boost::proto::detail::enable_unary<
55
is_vec<vec_expr<Expr> >,
57
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
58
::impl<const vec_expr<Expr>&>::result_type
60
operator+ (const vec_expr<Expr>& arg)
62
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
63
::impl<const vec_expr<Expr>&>()(arg);
65
template<class T, class M>
66
typename boost::proto::detail::enable_unary<
70
typename boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
71
::impl<const vec<T,M>&>::result_type
73
operator- (const vec<T,M>& arg)
75
return boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
76
::impl<const vec<T,M>&>()(arg);
79
typename boost::proto::detail::enable_unary<
81
is_vec<vec_expr<Expr> >,
83
typename boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
84
::impl<const vec_expr<Expr>&>::result_type
86
operator- (const vec_expr<Expr>& arg)
88
return boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
89
::impl<const vec_expr<Expr>&>()(arg);
91
template<class T, class M>
40
#if BOOST_VERSION < 104601
41
typename boost::proto::detail::enable_unary<
45
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
46
::impl<const vec<T,M>&>::result_type
48
operator+ (const vec<T,M>& arg)
50
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
51
::impl<const vec<T,M>&>()(arg);
53
#else // BOOST_VERSION >= 104601
54
typename boost::proto::detail::enable_unary<
56
vec_domain::proto_grammar,
59
boost::mpl::not_<boost::proto::is_extension<vec<T,M> > >
61
boost::proto::tag::unary_plus,
64
operator+ (const vec<T,M>& arg)
66
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, vec_domain, vec<T,M> const &>()(arg);
68
#endif // BOOST_VERSION
70
#if BOOST_VERSION < 104601
71
typename boost::proto::detail::enable_unary<
73
is_vec<vec_expr<Expr> >,
75
typename boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
76
::impl<const vec_expr<Expr>&>::result_type
78
operator+ (const vec_expr<Expr>& arg)
80
return boost::proto::functional::make_expr<boost::proto::tag::unary_plus, vec_domain>
81
::impl<const vec_expr<Expr>&>()(arg);
83
#else // BOOST_VERSION >= 104601
84
typename boost::proto::detail::enable_unary<
86
vec_domain::proto_grammar,
88
is_vec<vec_expr<Expr> >,
89
boost::mpl::not_<boost::proto::is_extension<vec_expr<Expr> > >
91
boost::proto::tag::unary_plus,
92
vec_expr<Expr> const &
94
operator+ (const vec_expr<Expr>& arg)
96
return boost::proto::detail::make_expr_<boost::proto::tag::unary_plus, vec_domain, vec_expr<Expr> const &>()(arg);
98
#endif // BOOST_VERSION
99
template<class T, class M>
100
#if BOOST_VERSION < 104601
101
typename boost::proto::detail::enable_unary<
105
typename boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
106
::impl<const vec<T,M>&>::result_type
108
operator- (const vec<T,M>& arg)
110
return boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
111
::impl<const vec<T,M>&>()(arg);
113
#else // BOOST_VERSION >= 104601
114
typename boost::proto::detail::enable_unary<
116
vec_domain::proto_grammar,
119
boost::mpl::not_<boost::proto::is_extension<vec<T,M> > >
121
boost::proto::tag::negate,
124
operator- (const vec<T,M>& arg)
126
return boost::proto::detail::make_expr_<boost::proto::tag::negate, vec_domain, vec<T,M> const &>()(arg);
128
#endif // BOOST_VERSION
130
#if BOOST_VERSION < 104601
131
typename boost::proto::detail::enable_unary<
133
is_vec<vec_expr<Expr> >,
135
typename boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
136
::impl<const vec_expr<Expr>&>::result_type
138
operator- (const vec_expr<Expr>& arg)
140
return boost::proto::functional::make_expr<boost::proto::tag::negate, vec_domain>
141
::impl<const vec_expr<Expr>&>()(arg);
143
#else // BOOST_VERSION >= 104601
144
typename boost::proto::detail::enable_unary<
146
vec_domain::proto_grammar,
148
is_vec<vec_expr<Expr> >,
149
boost::mpl::not_<boost::proto::is_extension<vec_expr<Expr> > >
151
boost::proto::tag::negate,
152
vec_expr<Expr> const &
154
operator- (const vec_expr<Expr>& arg)
156
return boost::proto::detail::make_expr_<boost::proto::tag::negate, vec_domain, vec_expr<Expr> const &>()(arg);
158
#endif // BOOST_VERSION
159
template<class T, class M>
160
#if BOOST_VERSION < 104601
93
162
boost::proto::detail::enable_binary<
102
171
operator+ (const int& l, const vec<T,M>& r)
104
173
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
105
::impl<const int&, const vec<T,M>&>() (l, r);
174
::impl<const int&, const vec<T,M>&>() (l, r);
176
#else // BOOST_VERSION >= 104601
177
typename boost::proto::detail::enable_binary<
179
vec_domain::proto_grammar,
181
boost::mpl::or_<is_vec<int >, is_vec<vec<T,M> > >,
184
boost::proto::is_extension<int >,
185
boost::proto::is_extension<vec<T,M> >
189
boost::proto::tag::plus,
193
operator+ (int const &left, vec<T,M> const &right)
195
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, int const &, vec<T,M> const &>()(left, right);
197
#endif // BOOST_VERSION
107
198
template<class T, class M>
199
#if BOOST_VERSION < 104601
109
201
boost::proto::detail::enable_binary<
118
210
operator+ (const T& l, const vec<T,M>& r)
120
212
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
121
::impl<const T&, const vec<T,M>&>() (l, r);
213
::impl<const T&, const vec<T,M>&>() (l, r);
215
#else // BOOST_VERSION >= 104601
216
typename boost::proto::detail::enable_binary<
218
vec_domain::proto_grammar,
220
boost::mpl::or_<is_vec<T >, is_vec<vec<T,M> > >,
223
boost::proto::is_extension<T >,
224
boost::proto::is_extension<vec<T,M> >
228
boost::proto::tag::plus,
232
operator+ (T const &left, vec<T,M> const &right)
234
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, T const &, vec<T,M> const &>()(left, right);
236
#endif // BOOST_VERSION
123
237
template<class T, class M>
238
#if BOOST_VERSION < 104601
125
240
boost::proto::detail::enable_binary<
134
249
operator+ (const vec<T,M>& l, const int& r)
136
251
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
137
::impl<const vec<T,M>&, const int&>() (l, r);
252
::impl<const vec<T,M>&, const int&>() (l, r);
254
#else // BOOST_VERSION >= 104601
255
typename boost::proto::detail::enable_binary<
257
vec_domain::proto_grammar,
259
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<int > >,
262
boost::proto::is_extension<vec<T,M> >,
263
boost::proto::is_extension<int >
267
boost::proto::tag::plus,
271
operator+ (vec<T,M> const &left, int const &right)
273
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec<T,M> const &, int const &>()(left, right);
275
#endif // BOOST_VERSION
139
276
template<class T, class M>
277
#if BOOST_VERSION < 104601
141
279
boost::proto::detail::enable_binary<
150
288
operator+ (const vec<T,M>& l, const T& r)
152
290
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
153
::impl<const vec<T,M>&, const T&>() (l, r);
291
::impl<const vec<T,M>&, const T&>() (l, r);
293
#else // BOOST_VERSION >= 104601
294
typename boost::proto::detail::enable_binary<
296
vec_domain::proto_grammar,
298
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<T > >,
301
boost::proto::is_extension<vec<T,M> >,
302
boost::proto::is_extension<T >
306
boost::proto::tag::plus,
310
operator+ (vec<T,M> const &left, T const &right)
312
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec<T,M> const &, T const &>()(left, right);
314
#endif // BOOST_VERSION
155
315
template<class T1, class T2, class M>
316
#if BOOST_VERSION < 104601
157
318
boost::proto::detail::enable_binary<
166
327
operator+ (const vec<T1,M>& l, const vec<T2,M>& r)
168
329
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
169
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
330
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
332
#else // BOOST_VERSION >= 104601
333
typename boost::proto::detail::enable_binary<
335
vec_domain::proto_grammar,
337
boost::mpl::or_<is_vec<vec<T1,M> >, is_vec<vec<T2,M> > >,
340
boost::proto::is_extension<vec<T1,M> >,
341
boost::proto::is_extension<vec<T2,M> >
345
boost::proto::tag::plus,
349
operator+ (vec<T1,M> const &left, vec<T2,M> const &right)
351
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec<T1,M> const &, vec<T2,M> const &>()(left, right);
353
#endif // BOOST_VERSION
171
354
template<class Expr>
355
#if BOOST_VERSION < 104601
173
357
boost::proto::detail::enable_binary<
182
366
operator+ (const int& l, const vec_expr<Expr>& r)
184
368
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
185
::impl<const int&, const vec_expr<Expr>&>() (l, r);
369
::impl<const int&, const vec_expr<Expr>&>() (l, r);
371
#else // BOOST_VERSION >= 104601
372
typename boost::proto::detail::enable_binary<
374
vec_domain::proto_grammar,
376
boost::mpl::or_<is_vec<int >, is_vec<vec_expr<Expr> > >,
379
boost::proto::is_extension<int >,
380
boost::proto::is_extension<vec_expr<Expr> >
384
boost::proto::tag::plus,
386
vec_expr<Expr> const &
388
operator+ (int const &left, vec_expr<Expr> const &right)
390
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, int const &, vec_expr<Expr> const &>()(left, right);
392
#endif // BOOST_VERSION
187
393
template<class Expr>
394
#if BOOST_VERSION < 104601
189
396
boost::proto::detail::enable_binary<
198
405
operator+ (const vec_expr<Expr>& l, const int& r)
200
407
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
201
::impl<const vec_expr<Expr>&, const int&>() (l, r);
408
::impl<const vec_expr<Expr>&, const int&>() (l, r);
410
#else // BOOST_VERSION >= 104601
411
typename boost::proto::detail::enable_binary<
413
vec_domain::proto_grammar,
415
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<int > >,
418
boost::proto::is_extension<vec_expr<Expr> >,
419
boost::proto::is_extension<int >
423
boost::proto::tag::plus,
424
vec_expr<Expr> const &,
427
operator+ (vec_expr<Expr> const &left, int const &right)
429
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec_expr<Expr> const &, int const &>()(left, right);
431
#endif // BOOST_VERSION
203
432
template<class T, class Expr>
433
#if BOOST_VERSION < 104601
205
435
boost::proto::detail::enable_binary<
214
444
operator+ (const T& l, const vec_expr<Expr>& r)
216
446
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
217
::impl<const T&, const vec_expr<Expr>&>() (l, r);
447
::impl<const T&, const vec_expr<Expr>&>() (l, r);
449
#else // BOOST_VERSION >= 104601
450
typename boost::proto::detail::enable_binary<
452
vec_domain::proto_grammar,
454
boost::mpl::or_<is_vec<T >, is_vec<vec_expr<Expr> > >,
457
boost::proto::is_extension<T >,
458
boost::proto::is_extension<vec_expr<Expr> >
462
boost::proto::tag::plus,
464
vec_expr<Expr> const &
466
operator+ (T const &left, vec_expr<Expr> const &right)
468
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, T const &, vec_expr<Expr> const &>()(left, right);
470
#endif // BOOST_VERSION
219
471
template<class T, class Expr>
472
#if BOOST_VERSION < 104601
221
474
boost::proto::detail::enable_binary<
230
483
operator+ (const vec_expr<Expr>& l, const T& r)
232
485
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
233
::impl<const vec_expr<Expr>&, const T&>() (l, r);
486
::impl<const vec_expr<Expr>&, const T&>() (l, r);
488
#else // BOOST_VERSION >= 104601
489
typename boost::proto::detail::enable_binary<
491
vec_domain::proto_grammar,
493
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<T > >,
496
boost::proto::is_extension<vec_expr<Expr> >,
497
boost::proto::is_extension<T >
501
boost::proto::tag::plus,
502
vec_expr<Expr> const &,
505
operator+ (vec_expr<Expr> const &left, T const &right)
507
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec_expr<Expr> const &, T const &>()(left, right);
509
#endif // BOOST_VERSION
235
510
template<class T, class M, class Expr>
511
#if BOOST_VERSION < 104601
237
513
boost::proto::detail::enable_binary<
246
522
operator+ (const vec<T,M>& l, const vec_expr<Expr>& r)
248
524
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
249
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
525
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
527
#else // BOOST_VERSION >= 104601
528
typename boost::proto::detail::enable_binary<
530
vec_domain::proto_grammar,
532
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<vec_expr<Expr> > >,
535
boost::proto::is_extension<vec<T,M> >,
536
boost::proto::is_extension<vec_expr<Expr> >
540
boost::proto::tag::plus,
542
vec_expr<Expr> const &
544
operator+ (vec<T,M> const &left, vec_expr<Expr> const &right)
546
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec<T,M> const &, vec_expr<Expr> const &>()(left, right);
548
#endif // BOOST_VERSION
251
549
template<class T, class M, class Expr>
550
#if BOOST_VERSION < 104601
253
552
boost::proto::detail::enable_binary<
262
561
operator+ (const vec_expr<Expr>& l, const vec<T,M>& r)
264
563
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
265
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
564
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
566
#else // BOOST_VERSION >= 104601
567
typename boost::proto::detail::enable_binary<
569
vec_domain::proto_grammar,
571
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<vec<T,M> > >,
574
boost::proto::is_extension<vec_expr<Expr> >,
575
boost::proto::is_extension<vec<T,M> >
579
boost::proto::tag::plus,
580
vec_expr<Expr> const &,
583
operator+ (vec_expr<Expr> const &left, vec<T,M> const &right)
585
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec_expr<Expr> const &, vec<T,M> const &>()(left, right);
587
#endif // BOOST_VERSION
267
588
template<class Expr1, class Expr2>
589
#if BOOST_VERSION < 104601
269
591
boost::proto::detail::enable_binary<
278
600
operator+ (const vec_expr<Expr1>& l, const vec_expr<Expr2>& r)
280
602
return boost::proto::functional::make_expr<boost::proto::tag::plus, vec_domain>
281
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
603
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
605
#else // BOOST_VERSION >= 104601
606
typename boost::proto::detail::enable_binary<
608
vec_domain::proto_grammar,
610
boost::mpl::or_<is_vec<vec_expr<Expr1> >, is_vec<vec_expr<Expr2> > >,
613
boost::proto::is_extension<vec_expr<Expr1> >,
614
boost::proto::is_extension<vec_expr<Expr2> >
618
boost::proto::tag::plus,
619
vec_expr<Expr1> const &,
620
vec_expr<Expr2> const &
622
operator+ (vec_expr<Expr1> const &left, vec_expr<Expr2> const &right)
624
return boost::proto::detail::make_expr_<boost::proto::tag::plus, vec_domain, vec_expr<Expr1> const &, vec_expr<Expr2> const &>()(left, right);
626
#endif // BOOST_VERSION
283
627
template<class T, class M>
628
#if BOOST_VERSION < 104601
285
630
boost::proto::detail::enable_binary<
294
639
operator- (const int& l, const vec<T,M>& r)
296
641
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
297
::impl<const int&, const vec<T,M>&>() (l, r);
642
::impl<const int&, const vec<T,M>&>() (l, r);
644
#else // BOOST_VERSION >= 104601
645
typename boost::proto::detail::enable_binary<
647
vec_domain::proto_grammar,
649
boost::mpl::or_<is_vec<int >, is_vec<vec<T,M> > >,
652
boost::proto::is_extension<int >,
653
boost::proto::is_extension<vec<T,M> >
657
boost::proto::tag::minus,
661
operator- (int const &left, vec<T,M> const &right)
663
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, int const &, vec<T,M> const &>()(left, right);
665
#endif // BOOST_VERSION
299
666
template<class T, class M>
667
#if BOOST_VERSION < 104601
301
669
boost::proto::detail::enable_binary<
310
678
operator- (const T& l, const vec<T,M>& r)
312
680
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
313
::impl<const T&, const vec<T,M>&>() (l, r);
681
::impl<const T&, const vec<T,M>&>() (l, r);
683
#else // BOOST_VERSION >= 104601
684
typename boost::proto::detail::enable_binary<
686
vec_domain::proto_grammar,
688
boost::mpl::or_<is_vec<T >, is_vec<vec<T,M> > >,
691
boost::proto::is_extension<T >,
692
boost::proto::is_extension<vec<T,M> >
696
boost::proto::tag::minus,
700
operator- (T const &left, vec<T,M> const &right)
702
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, T const &, vec<T,M> const &>()(left, right);
704
#endif // BOOST_VERSION
315
705
template<class T, class M>
706
#if BOOST_VERSION < 104601
317
708
boost::proto::detail::enable_binary<
326
717
operator- (const vec<T,M>& l, const int& r)
328
719
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
329
::impl<const vec<T,M>&, const int&>() (l, r);
720
::impl<const vec<T,M>&, const int&>() (l, r);
722
#else // BOOST_VERSION >= 104601
723
typename boost::proto::detail::enable_binary<
725
vec_domain::proto_grammar,
727
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<int > >,
730
boost::proto::is_extension<vec<T,M> >,
731
boost::proto::is_extension<int >
735
boost::proto::tag::minus,
739
operator- (vec<T,M> const &left, int const &right)
741
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec<T,M> const &, int const &>()(left, right);
743
#endif // BOOST_VERSION
331
744
template<class T, class M>
745
#if BOOST_VERSION < 104601
333
747
boost::proto::detail::enable_binary<
342
756
operator- (const vec<T,M>& l, const T& r)
344
758
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
345
::impl<const vec<T,M>&, const T&>() (l, r);
759
::impl<const vec<T,M>&, const T&>() (l, r);
761
#else // BOOST_VERSION >= 104601
762
typename boost::proto::detail::enable_binary<
764
vec_domain::proto_grammar,
766
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<T > >,
769
boost::proto::is_extension<vec<T,M> >,
770
boost::proto::is_extension<T >
774
boost::proto::tag::minus,
778
operator- (vec<T,M> const &left, T const &right)
780
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec<T,M> const &, T const &>()(left, right);
782
#endif // BOOST_VERSION
347
783
template<class T1, class T2, class M>
784
#if BOOST_VERSION < 104601
349
786
boost::proto::detail::enable_binary<
358
795
operator- (const vec<T1,M>& l, const vec<T2,M>& r)
360
797
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
361
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
798
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
800
#else // BOOST_VERSION >= 104601
801
typename boost::proto::detail::enable_binary<
803
vec_domain::proto_grammar,
805
boost::mpl::or_<is_vec<vec<T1,M> >, is_vec<vec<T2,M> > >,
808
boost::proto::is_extension<vec<T1,M> >,
809
boost::proto::is_extension<vec<T2,M> >
813
boost::proto::tag::minus,
817
operator- (vec<T1,M> const &left, vec<T2,M> const &right)
819
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec<T1,M> const &, vec<T2,M> const &>()(left, right);
821
#endif // BOOST_VERSION
363
822
template<class Expr>
823
#if BOOST_VERSION < 104601
365
825
boost::proto::detail::enable_binary<
374
834
operator- (const int& l, const vec_expr<Expr>& r)
376
836
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
377
::impl<const int&, const vec_expr<Expr>&>() (l, r);
837
::impl<const int&, const vec_expr<Expr>&>() (l, r);
839
#else // BOOST_VERSION >= 104601
840
typename boost::proto::detail::enable_binary<
842
vec_domain::proto_grammar,
844
boost::mpl::or_<is_vec<int >, is_vec<vec_expr<Expr> > >,
847
boost::proto::is_extension<int >,
848
boost::proto::is_extension<vec_expr<Expr> >
852
boost::proto::tag::minus,
854
vec_expr<Expr> const &
856
operator- (int const &left, vec_expr<Expr> const &right)
858
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, int const &, vec_expr<Expr> const &>()(left, right);
860
#endif // BOOST_VERSION
379
861
template<class Expr>
862
#if BOOST_VERSION < 104601
381
864
boost::proto::detail::enable_binary<
390
873
operator- (const vec_expr<Expr>& l, const int& r)
392
875
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
393
::impl<const vec_expr<Expr>&, const int&>() (l, r);
876
::impl<const vec_expr<Expr>&, const int&>() (l, r);
878
#else // BOOST_VERSION >= 104601
879
typename boost::proto::detail::enable_binary<
881
vec_domain::proto_grammar,
883
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<int > >,
886
boost::proto::is_extension<vec_expr<Expr> >,
887
boost::proto::is_extension<int >
891
boost::proto::tag::minus,
892
vec_expr<Expr> const &,
895
operator- (vec_expr<Expr> const &left, int const &right)
897
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec_expr<Expr> const &, int const &>()(left, right);
899
#endif // BOOST_VERSION
395
900
template<class T, class Expr>
901
#if BOOST_VERSION < 104601
397
903
boost::proto::detail::enable_binary<
406
912
operator- (const T& l, const vec_expr<Expr>& r)
408
914
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
409
::impl<const T&, const vec_expr<Expr>&>() (l, r);
915
::impl<const T&, const vec_expr<Expr>&>() (l, r);
917
#else // BOOST_VERSION >= 104601
918
typename boost::proto::detail::enable_binary<
920
vec_domain::proto_grammar,
922
boost::mpl::or_<is_vec<T >, is_vec<vec_expr<Expr> > >,
925
boost::proto::is_extension<T >,
926
boost::proto::is_extension<vec_expr<Expr> >
930
boost::proto::tag::minus,
932
vec_expr<Expr> const &
934
operator- (T const &left, vec_expr<Expr> const &right)
936
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, T const &, vec_expr<Expr> const &>()(left, right);
938
#endif // BOOST_VERSION
411
939
template<class T, class Expr>
940
#if BOOST_VERSION < 104601
413
942
boost::proto::detail::enable_binary<
422
951
operator- (const vec_expr<Expr>& l, const T& r)
424
953
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
425
::impl<const vec_expr<Expr>&, const T&>() (l, r);
954
::impl<const vec_expr<Expr>&, const T&>() (l, r);
956
#else // BOOST_VERSION >= 104601
957
typename boost::proto::detail::enable_binary<
959
vec_domain::proto_grammar,
961
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<T > >,
964
boost::proto::is_extension<vec_expr<Expr> >,
965
boost::proto::is_extension<T >
969
boost::proto::tag::minus,
970
vec_expr<Expr> const &,
973
operator- (vec_expr<Expr> const &left, T const &right)
975
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec_expr<Expr> const &, T const &>()(left, right);
977
#endif // BOOST_VERSION
427
978
template<class T, class M, class Expr>
979
#if BOOST_VERSION < 104601
429
981
boost::proto::detail::enable_binary<
438
990
operator- (const vec<T,M>& l, const vec_expr<Expr>& r)
440
992
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
441
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
993
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
995
#else // BOOST_VERSION >= 104601
996
typename boost::proto::detail::enable_binary<
998
vec_domain::proto_grammar,
1000
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<vec_expr<Expr> > >,
1003
boost::proto::is_extension<vec<T,M> >,
1004
boost::proto::is_extension<vec_expr<Expr> >
1008
boost::proto::tag::minus,
1010
vec_expr<Expr> const &
1012
operator- (vec<T,M> const &left, vec_expr<Expr> const &right)
1014
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec<T,M> const &, vec_expr<Expr> const &>()(left, right);
1016
#endif // BOOST_VERSION
443
1017
template<class T, class M, class Expr>
1018
#if BOOST_VERSION < 104601
445
1020
boost::proto::detail::enable_binary<
454
1029
operator- (const vec_expr<Expr>& l, const vec<T,M>& r)
456
1031
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
457
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1032
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1034
#else // BOOST_VERSION >= 104601
1035
typename boost::proto::detail::enable_binary<
1037
vec_domain::proto_grammar,
1039
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<vec<T,M> > >,
1042
boost::proto::is_extension<vec_expr<Expr> >,
1043
boost::proto::is_extension<vec<T,M> >
1047
boost::proto::tag::minus,
1048
vec_expr<Expr> const &,
1051
operator- (vec_expr<Expr> const &left, vec<T,M> const &right)
1053
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec_expr<Expr> const &, vec<T,M> const &>()(left, right);
1055
#endif // BOOST_VERSION
459
1056
template<class Expr1, class Expr2>
1057
#if BOOST_VERSION < 104601
461
1059
boost::proto::detail::enable_binary<
470
1068
operator- (const vec_expr<Expr1>& l, const vec_expr<Expr2>& r)
472
1070
return boost::proto::functional::make_expr<boost::proto::tag::minus, vec_domain>
473
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
1071
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
1073
#else // BOOST_VERSION >= 104601
1074
typename boost::proto::detail::enable_binary<
1076
vec_domain::proto_grammar,
1078
boost::mpl::or_<is_vec<vec_expr<Expr1> >, is_vec<vec_expr<Expr2> > >,
1081
boost::proto::is_extension<vec_expr<Expr1> >,
1082
boost::proto::is_extension<vec_expr<Expr2> >
1086
boost::proto::tag::minus,
1087
vec_expr<Expr1> const &,
1088
vec_expr<Expr2> const &
1090
operator- (vec_expr<Expr1> const &left, vec_expr<Expr2> const &right)
1092
return boost::proto::detail::make_expr_<boost::proto::tag::minus, vec_domain, vec_expr<Expr1> const &, vec_expr<Expr2> const &>()(left, right);
1094
#endif // BOOST_VERSION
475
1095
template<class T, class M>
1096
#if BOOST_VERSION < 104601
477
1098
boost::proto::detail::enable_binary<
486
1107
operator* (const int& l, const vec<T,M>& r)
488
1109
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
489
::impl<const int&, const vec<T,M>&>() (l, r);
1110
::impl<const int&, const vec<T,M>&>() (l, r);
1112
#else // BOOST_VERSION >= 104601
1113
typename boost::proto::detail::enable_binary<
1115
vec_domain::proto_grammar,
1117
boost::mpl::or_<is_vec<int >, is_vec<vec<T,M> > >,
1120
boost::proto::is_extension<int >,
1121
boost::proto::is_extension<vec<T,M> >
1125
boost::proto::tag::multiplies,
1129
operator* (int const &left, vec<T,M> const &right)
1131
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, int const &, vec<T,M> const &>()(left, right);
1133
#endif // BOOST_VERSION
491
1134
template<class T, class M>
1135
#if BOOST_VERSION < 104601
493
1137
boost::proto::detail::enable_binary<
502
1146
operator* (const T& l, const vec<T,M>& r)
504
1148
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
505
::impl<const T&, const vec<T,M>&>() (l, r);
1149
::impl<const T&, const vec<T,M>&>() (l, r);
1151
#else // BOOST_VERSION >= 104601
1152
typename boost::proto::detail::enable_binary<
1154
vec_domain::proto_grammar,
1156
boost::mpl::or_<is_vec<T >, is_vec<vec<T,M> > >,
1159
boost::proto::is_extension<T >,
1160
boost::proto::is_extension<vec<T,M> >
1164
boost::proto::tag::multiplies,
1168
operator* (T const &left, vec<T,M> const &right)
1170
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, T const &, vec<T,M> const &>()(left, right);
1172
#endif // BOOST_VERSION
507
1173
template<class T, class M>
1174
#if BOOST_VERSION < 104601
509
1176
boost::proto::detail::enable_binary<
518
1185
operator* (const vec<T,M>& l, const int& r)
520
1187
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
521
::impl<const vec<T,M>&, const int&>() (l, r);
1188
::impl<const vec<T,M>&, const int&>() (l, r);
1190
#else // BOOST_VERSION >= 104601
1191
typename boost::proto::detail::enable_binary<
1193
vec_domain::proto_grammar,
1195
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<int > >,
1198
boost::proto::is_extension<vec<T,M> >,
1199
boost::proto::is_extension<int >
1203
boost::proto::tag::multiplies,
1207
operator* (vec<T,M> const &left, int const &right)
1209
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec<T,M> const &, int const &>()(left, right);
1211
#endif // BOOST_VERSION
523
1212
template<class T, class M>
1213
#if BOOST_VERSION < 104601
525
1215
boost::proto::detail::enable_binary<
534
1224
operator* (const vec<T,M>& l, const T& r)
536
1226
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
537
::impl<const vec<T,M>&, const T&>() (l, r);
1227
::impl<const vec<T,M>&, const T&>() (l, r);
1229
#else // BOOST_VERSION >= 104601
1230
typename boost::proto::detail::enable_binary<
1232
vec_domain::proto_grammar,
1234
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<T > >,
1237
boost::proto::is_extension<vec<T,M> >,
1238
boost::proto::is_extension<T >
1242
boost::proto::tag::multiplies,
1246
operator* (vec<T,M> const &left, T const &right)
1248
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec<T,M> const &, T const &>()(left, right);
1250
#endif // BOOST_VERSION
539
1251
template<class T1, class T2, class M>
1252
#if BOOST_VERSION < 104601
541
1254
boost::proto::detail::enable_binary<
550
1263
operator* (const vec<T1,M>& l, const vec<T2,M>& r)
552
1265
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
553
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
1266
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
1268
#else // BOOST_VERSION >= 104601
1269
typename boost::proto::detail::enable_binary<
1271
vec_domain::proto_grammar,
1273
boost::mpl::or_<is_vec<vec<T1,M> >, is_vec<vec<T2,M> > >,
1276
boost::proto::is_extension<vec<T1,M> >,
1277
boost::proto::is_extension<vec<T2,M> >
1281
boost::proto::tag::multiplies,
1285
operator* (vec<T1,M> const &left, vec<T2,M> const &right)
1287
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec<T1,M> const &, vec<T2,M> const &>()(left, right);
1289
#endif // BOOST_VERSION
555
1290
template<class Expr>
1291
#if BOOST_VERSION < 104601
557
1293
boost::proto::detail::enable_binary<
566
1302
operator* (const int& l, const vec_expr<Expr>& r)
568
1304
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
569
::impl<const int&, const vec_expr<Expr>&>() (l, r);
1305
::impl<const int&, const vec_expr<Expr>&>() (l, r);
1307
#else // BOOST_VERSION >= 104601
1308
typename boost::proto::detail::enable_binary<
1310
vec_domain::proto_grammar,
1312
boost::mpl::or_<is_vec<int >, is_vec<vec_expr<Expr> > >,
1315
boost::proto::is_extension<int >,
1316
boost::proto::is_extension<vec_expr<Expr> >
1320
boost::proto::tag::multiplies,
1322
vec_expr<Expr> const &
1324
operator* (int const &left, vec_expr<Expr> const &right)
1326
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, int const &, vec_expr<Expr> const &>()(left, right);
1328
#endif // BOOST_VERSION
571
1329
template<class Expr>
1330
#if BOOST_VERSION < 104601
573
1332
boost::proto::detail::enable_binary<
582
1341
operator* (const vec_expr<Expr>& l, const int& r)
584
1343
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
585
::impl<const vec_expr<Expr>&, const int&>() (l, r);
1344
::impl<const vec_expr<Expr>&, const int&>() (l, r);
1346
#else // BOOST_VERSION >= 104601
1347
typename boost::proto::detail::enable_binary<
1349
vec_domain::proto_grammar,
1351
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<int > >,
1354
boost::proto::is_extension<vec_expr<Expr> >,
1355
boost::proto::is_extension<int >
1359
boost::proto::tag::multiplies,
1360
vec_expr<Expr> const &,
1363
operator* (vec_expr<Expr> const &left, int const &right)
1365
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec_expr<Expr> const &, int const &>()(left, right);
1367
#endif // BOOST_VERSION
587
1368
template<class T, class Expr>
1369
#if BOOST_VERSION < 104601
589
1371
boost::proto::detail::enable_binary<
598
1380
operator* (const T& l, const vec_expr<Expr>& r)
600
1382
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
601
::impl<const T&, const vec_expr<Expr>&>() (l, r);
1383
::impl<const T&, const vec_expr<Expr>&>() (l, r);
1385
#else // BOOST_VERSION >= 104601
1386
typename boost::proto::detail::enable_binary<
1388
vec_domain::proto_grammar,
1390
boost::mpl::or_<is_vec<T >, is_vec<vec_expr<Expr> > >,
1393
boost::proto::is_extension<T >,
1394
boost::proto::is_extension<vec_expr<Expr> >
1398
boost::proto::tag::multiplies,
1400
vec_expr<Expr> const &
1402
operator* (T const &left, vec_expr<Expr> const &right)
1404
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, T const &, vec_expr<Expr> const &>()(left, right);
1406
#endif // BOOST_VERSION
603
1407
template<class T, class Expr>
1408
#if BOOST_VERSION < 104601
605
1410
boost::proto::detail::enable_binary<
614
1419
operator* (const vec_expr<Expr>& l, const T& r)
616
1421
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
617
::impl<const vec_expr<Expr>&, const T&>() (l, r);
1422
::impl<const vec_expr<Expr>&, const T&>() (l, r);
1424
#else // BOOST_VERSION >= 104601
1425
typename boost::proto::detail::enable_binary<
1427
vec_domain::proto_grammar,
1429
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<T > >,
1432
boost::proto::is_extension<vec_expr<Expr> >,
1433
boost::proto::is_extension<T >
1437
boost::proto::tag::multiplies,
1438
vec_expr<Expr> const &,
1441
operator* (vec_expr<Expr> const &left, T const &right)
1443
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec_expr<Expr> const &, T const &>()(left, right);
1445
#endif // BOOST_VERSION
619
1446
template<class T, class M, class Expr>
1447
#if BOOST_VERSION < 104601
621
1449
boost::proto::detail::enable_binary<
630
1458
operator* (const vec<T,M>& l, const vec_expr<Expr>& r)
632
1460
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
633
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
1461
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
1463
#else // BOOST_VERSION >= 104601
1464
typename boost::proto::detail::enable_binary<
1466
vec_domain::proto_grammar,
1468
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<vec_expr<Expr> > >,
1471
boost::proto::is_extension<vec<T,M> >,
1472
boost::proto::is_extension<vec_expr<Expr> >
1476
boost::proto::tag::multiplies,
1478
vec_expr<Expr> const &
1480
operator* (vec<T,M> const &left, vec_expr<Expr> const &right)
1482
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec<T,M> const &, vec_expr<Expr> const &>()(left, right);
1484
#endif // BOOST_VERSION
635
1485
template<class T, class M, class Expr>
1486
#if BOOST_VERSION < 104601
637
1488
boost::proto::detail::enable_binary<
646
1497
operator* (const vec_expr<Expr>& l, const vec<T,M>& r)
648
1499
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
649
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1500
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1502
#else // BOOST_VERSION >= 104601
1503
typename boost::proto::detail::enable_binary<
1505
vec_domain::proto_grammar,
1507
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<vec<T,M> > >,
1510
boost::proto::is_extension<vec_expr<Expr> >,
1511
boost::proto::is_extension<vec<T,M> >
1515
boost::proto::tag::multiplies,
1516
vec_expr<Expr> const &,
1519
operator* (vec_expr<Expr> const &left, vec<T,M> const &right)
1521
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec_expr<Expr> const &, vec<T,M> const &>()(left, right);
1523
#endif // BOOST_VERSION
651
1524
template<class Expr1, class Expr2>
1525
#if BOOST_VERSION < 104601
653
1527
boost::proto::detail::enable_binary<
662
1536
operator* (const vec_expr<Expr1>& l, const vec_expr<Expr2>& r)
664
1538
return boost::proto::functional::make_expr<boost::proto::tag::multiplies, vec_domain>
665
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
1539
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
1541
#else // BOOST_VERSION >= 104601
1542
typename boost::proto::detail::enable_binary<
1544
vec_domain::proto_grammar,
1546
boost::mpl::or_<is_vec<vec_expr<Expr1> >, is_vec<vec_expr<Expr2> > >,
1549
boost::proto::is_extension<vec_expr<Expr1> >,
1550
boost::proto::is_extension<vec_expr<Expr2> >
1554
boost::proto::tag::multiplies,
1555
vec_expr<Expr1> const &,
1556
vec_expr<Expr2> const &
1558
operator* (vec_expr<Expr1> const &left, vec_expr<Expr2> const &right)
1560
return boost::proto::detail::make_expr_<boost::proto::tag::multiplies, vec_domain, vec_expr<Expr1> const &, vec_expr<Expr2> const &>()(left, right);
1562
#endif // BOOST_VERSION
667
1563
template<class T, class M>
1564
#if BOOST_VERSION < 104601
669
1566
boost::proto::detail::enable_binary<
678
1575
operator/ (const int& l, const vec<T,M>& r)
680
1577
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
681
::impl<const int&, const vec<T,M>&>() (l, r);
1578
::impl<const int&, const vec<T,M>&>() (l, r);
1580
#else // BOOST_VERSION >= 104601
1581
typename boost::proto::detail::enable_binary<
1583
vec_domain::proto_grammar,
1585
boost::mpl::or_<is_vec<int >, is_vec<vec<T,M> > >,
1588
boost::proto::is_extension<int >,
1589
boost::proto::is_extension<vec<T,M> >
1593
boost::proto::tag::divides,
1597
operator/ (int const &left, vec<T,M> const &right)
1599
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, int const &, vec<T,M> const &>()(left, right);
1601
#endif // BOOST_VERSION
683
1602
template<class T, class M>
1603
#if BOOST_VERSION < 104601
685
1605
boost::proto::detail::enable_binary<
694
1614
operator/ (const T& l, const vec<T,M>& r)
696
1616
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
697
::impl<const T&, const vec<T,M>&>() (l, r);
1617
::impl<const T&, const vec<T,M>&>() (l, r);
1619
#else // BOOST_VERSION >= 104601
1620
typename boost::proto::detail::enable_binary<
1622
vec_domain::proto_grammar,
1624
boost::mpl::or_<is_vec<T >, is_vec<vec<T,M> > >,
1627
boost::proto::is_extension<T >,
1628
boost::proto::is_extension<vec<T,M> >
1632
boost::proto::tag::divides,
1636
operator/ (T const &left, vec<T,M> const &right)
1638
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, T const &, vec<T,M> const &>()(left, right);
1640
#endif // BOOST_VERSION
699
1641
template<class T, class M>
1642
#if BOOST_VERSION < 104601
701
1644
boost::proto::detail::enable_binary<
710
1653
operator/ (const vec<T,M>& l, const int& r)
712
1655
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
713
::impl<const vec<T,M>&, const int&>() (l, r);
1656
::impl<const vec<T,M>&, const int&>() (l, r);
1658
#else // BOOST_VERSION >= 104601
1659
typename boost::proto::detail::enable_binary<
1661
vec_domain::proto_grammar,
1663
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<int > >,
1666
boost::proto::is_extension<vec<T,M> >,
1667
boost::proto::is_extension<int >
1671
boost::proto::tag::divides,
1675
operator/ (vec<T,M> const &left, int const &right)
1677
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec<T,M> const &, int const &>()(left, right);
1679
#endif // BOOST_VERSION
715
1680
template<class T, class M>
1681
#if BOOST_VERSION < 104601
717
1683
boost::proto::detail::enable_binary<
726
1692
operator/ (const vec<T,M>& l, const T& r)
728
1694
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
729
::impl<const vec<T,M>&, const T&>() (l, r);
1695
::impl<const vec<T,M>&, const T&>() (l, r);
1697
#else // BOOST_VERSION >= 104601
1698
typename boost::proto::detail::enable_binary<
1700
vec_domain::proto_grammar,
1702
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<T > >,
1705
boost::proto::is_extension<vec<T,M> >,
1706
boost::proto::is_extension<T >
1710
boost::proto::tag::divides,
1714
operator/ (vec<T,M> const &left, T const &right)
1716
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec<T,M> const &, T const &>()(left, right);
1718
#endif // BOOST_VERSION
731
1719
template<class T1, class T2, class M>
1720
#if BOOST_VERSION < 104601
733
1722
boost::proto::detail::enable_binary<
742
1731
operator/ (const vec<T1,M>& l, const vec<T2,M>& r)
744
1733
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
745
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
1734
::impl<const vec<T1,M>&, const vec<T2,M>&>() (l, r);
1736
#else // BOOST_VERSION >= 104601
1737
typename boost::proto::detail::enable_binary<
1739
vec_domain::proto_grammar,
1741
boost::mpl::or_<is_vec<vec<T1,M> >, is_vec<vec<T2,M> > >,
1744
boost::proto::is_extension<vec<T1,M> >,
1745
boost::proto::is_extension<vec<T2,M> >
1749
boost::proto::tag::divides,
1753
operator/ (vec<T1,M> const &left, vec<T2,M> const &right)
1755
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec<T1,M> const &, vec<T2,M> const &>()(left, right);
1757
#endif // BOOST_VERSION
747
1758
template<class Expr>
1759
#if BOOST_VERSION < 104601
749
1761
boost::proto::detail::enable_binary<
758
1770
operator/ (const int& l, const vec_expr<Expr>& r)
760
1772
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
761
::impl<const int&, const vec_expr<Expr>&>() (l, r);
1773
::impl<const int&, const vec_expr<Expr>&>() (l, r);
1775
#else // BOOST_VERSION >= 104601
1776
typename boost::proto::detail::enable_binary<
1778
vec_domain::proto_grammar,
1780
boost::mpl::or_<is_vec<int >, is_vec<vec_expr<Expr> > >,
1783
boost::proto::is_extension<int >,
1784
boost::proto::is_extension<vec_expr<Expr> >
1788
boost::proto::tag::divides,
1790
vec_expr<Expr> const &
1792
operator/ (int const &left, vec_expr<Expr> const &right)
1794
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, int const &, vec_expr<Expr> const &>()(left, right);
1796
#endif // BOOST_VERSION
763
1797
template<class Expr>
1798
#if BOOST_VERSION < 104601
765
1800
boost::proto::detail::enable_binary<
774
1809
operator/ (const vec_expr<Expr>& l, const int& r)
776
1811
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
777
::impl<const vec_expr<Expr>&, const int&>() (l, r);
1812
::impl<const vec_expr<Expr>&, const int&>() (l, r);
1814
#else // BOOST_VERSION >= 104601
1815
typename boost::proto::detail::enable_binary<
1817
vec_domain::proto_grammar,
1819
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<int > >,
1822
boost::proto::is_extension<vec_expr<Expr> >,
1823
boost::proto::is_extension<int >
1827
boost::proto::tag::divides,
1828
vec_expr<Expr> const &,
1831
operator/ (vec_expr<Expr> const &left, int const &right)
1833
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec_expr<Expr> const &, int const &>()(left, right);
1835
#endif // BOOST_VERSION
779
1836
template<class T, class Expr>
1837
#if BOOST_VERSION < 104601
781
1839
boost::proto::detail::enable_binary<
790
1848
operator/ (const T& l, const vec_expr<Expr>& r)
792
1850
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
793
::impl<const T&, const vec_expr<Expr>&>() (l, r);
1851
::impl<const T&, const vec_expr<Expr>&>() (l, r);
1853
#else // BOOST_VERSION >= 104601
1854
typename boost::proto::detail::enable_binary<
1856
vec_domain::proto_grammar,
1858
boost::mpl::or_<is_vec<T >, is_vec<vec_expr<Expr> > >,
1861
boost::proto::is_extension<T >,
1862
boost::proto::is_extension<vec_expr<Expr> >
1866
boost::proto::tag::divides,
1868
vec_expr<Expr> const &
1870
operator/ (T const &left, vec_expr<Expr> const &right)
1872
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, T const &, vec_expr<Expr> const &>()(left, right);
1874
#endif // BOOST_VERSION
795
1875
template<class T, class Expr>
1876
#if BOOST_VERSION < 104601
797
1878
boost::proto::detail::enable_binary<
806
1887
operator/ (const vec_expr<Expr>& l, const T& r)
808
1889
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
809
::impl<const vec_expr<Expr>&, const T&>() (l, r);
1890
::impl<const vec_expr<Expr>&, const T&>() (l, r);
1892
#else // BOOST_VERSION >= 104601
1893
typename boost::proto::detail::enable_binary<
1895
vec_domain::proto_grammar,
1897
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<T > >,
1900
boost::proto::is_extension<vec_expr<Expr> >,
1901
boost::proto::is_extension<T >
1905
boost::proto::tag::divides,
1906
vec_expr<Expr> const &,
1909
operator/ (vec_expr<Expr> const &left, T const &right)
1911
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec_expr<Expr> const &, T const &>()(left, right);
1913
#endif // BOOST_VERSION
811
1914
template<class T, class M, class Expr>
1915
#if BOOST_VERSION < 104601
813
1917
boost::proto::detail::enable_binary<
822
1926
operator/ (const vec<T,M>& l, const vec_expr<Expr>& r)
824
1928
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
825
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
1929
::impl<const vec<T,M>&, const vec_expr<Expr>&>() (l, r);
1931
#else // BOOST_VERSION >= 104601
1932
typename boost::proto::detail::enable_binary<
1934
vec_domain::proto_grammar,
1936
boost::mpl::or_<is_vec<vec<T,M> >, is_vec<vec_expr<Expr> > >,
1939
boost::proto::is_extension<vec<T,M> >,
1940
boost::proto::is_extension<vec_expr<Expr> >
1944
boost::proto::tag::divides,
1946
vec_expr<Expr> const &
1948
operator/ (vec<T,M> const &left, vec_expr<Expr> const &right)
1950
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec<T,M> const &, vec_expr<Expr> const &>()(left, right);
1952
#endif // BOOST_VERSION
827
1953
template<class T, class M, class Expr>
1954
#if BOOST_VERSION < 104601
829
1956
boost::proto::detail::enable_binary<
838
1965
operator/ (const vec_expr<Expr>& l, const vec<T,M>& r)
840
1967
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
841
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1968
::impl<const vec_expr<Expr>&, const vec<T,M>&>() (l, r);
1970
#else // BOOST_VERSION >= 104601
1971
typename boost::proto::detail::enable_binary<
1973
vec_domain::proto_grammar,
1975
boost::mpl::or_<is_vec<vec_expr<Expr> >, is_vec<vec<T,M> > >,
1978
boost::proto::is_extension<vec_expr<Expr> >,
1979
boost::proto::is_extension<vec<T,M> >
1983
boost::proto::tag::divides,
1984
vec_expr<Expr> const &,
1987
operator/ (vec_expr<Expr> const &left, vec<T,M> const &right)
1989
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec_expr<Expr> const &, vec<T,M> const &>()(left, right);
1991
#endif // BOOST_VERSION
843
1992
template<class Expr1, class Expr2>
1993
#if BOOST_VERSION < 104601
845
1995
boost::proto::detail::enable_binary<
854
2004
operator/ (const vec_expr<Expr1>& l, const vec_expr<Expr2>& r)
856
2006
return boost::proto::functional::make_expr<boost::proto::tag::divides, vec_domain>
857
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
2007
::impl<const vec_expr<Expr1>&, const vec_expr<Expr2>&>() (l, r);
2009
#else // BOOST_VERSION >= 104601
2010
typename boost::proto::detail::enable_binary<
2012
vec_domain::proto_grammar,
2014
boost::mpl::or_<is_vec<vec_expr<Expr1> >, is_vec<vec_expr<Expr2> > >,
2017
boost::proto::is_extension<vec_expr<Expr1> >,
2018
boost::proto::is_extension<vec_expr<Expr2> >
2022
boost::proto::tag::divides,
2023
vec_expr<Expr1> const &,
2024
vec_expr<Expr2> const &
2026
operator/ (vec_expr<Expr1> const &left, vec_expr<Expr2> const &right)
2028
return boost::proto::detail::make_expr_<boost::proto::tag::divides, vec_domain, vec_expr<Expr1> const &, vec_expr<Expr2> const &>()(left, right);
2030
#endif // BOOST_VERSION
859
2031
namespace vec_detail {
860
2032
struct plus_assign {
861
2033
template<class T, class U>
1780
2952
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
1782
2954
template <class Expr>
1783
typename vec_expr<Expr>::element_type
2955
typename vec_expr<Expr>::value_type
1784
2956
dot (const vec_expr<Expr>& x, const int& y)
1786
2958
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
1788
2960
template <class Expr>
1789
typename vec_expr<Expr>::element_type
2961
typename vec_expr<Expr>::value_type
1790
2962
dot (const int& x, const vec_expr<Expr>& y)
1792
2964
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
1794
2966
template <class T, class Expr>
1795
typename promote<T,typename vec_expr<Expr>::element_type>::type
2967
typename promote<T,typename vec_expr<Expr>::value_type>::type
1796
2968
dot (const vec_expr<Expr>& x, const T& y)
1798
2970
return y*dis_accumulate (x.begin(), x.size(), x.ownership().comm());
1800
2972
template <class T, class Expr>
1801
typename promote<T,typename vec_expr<Expr>::element_type>::type
2973
typename promote<T,typename vec_expr<Expr>::value_type>::type
1802
2974
dot (const T& x, const vec_expr<Expr>& y)
1804
2976
return x*dis_accumulate (y.begin(), y.size(), y.ownership().comm());
1806
2978
template <class T, class M, class Expr>
1807
typename promote<T,typename vec_expr<Expr>::element_type>::type
2979
typename promote<T,typename vec_expr<Expr>::value_type>::type
1808
2980
dot (const vec<T,M>& x, const vec_expr<Expr>& y)
1810
2982
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
1812
2984
template <class T, class M, class Expr>
1813
typename promote<T,typename vec_expr<Expr>::element_type>::type
2985
typename promote<T,typename vec_expr<Expr>::value_type>::type
1814
2986
dot (const vec_expr<Expr>& x, const vec<T,M>& y)
1816
2988
return dis_inner_product (x.begin(), y.begin(), x.size(), x.ownership().comm());
1818
2990
template <class Expr1, class Expr2>
1819
2991
typename promote<
1820
typename vec_expr<Expr1>::element_type,
1821
typename vec_expr<Expr2>::element_type
2992
typename vec_expr<Expr1>::value_type,
2993
typename vec_expr<Expr2>::value_type
1823
2995
dot (const vec_expr<Expr1>& x, const vec_expr<Expr2>& y)