1<?xml version="1.0" encoding="utf-8"?>
2<!--
3  Copyright 2012 Eric Niebler
4
5  Distributed under the Boost
6  Software License, Version 1.0. (See accompanying
7  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8  -->
9<header name="boost/proto/operators.hpp">
10  <para>Contains all the overloaded operators that make it possible to build Proto expression trees. </para>
11  <namespace name="boost">
12    <namespace name="proto">
13      <struct name="is_extension">
14        <template>
15          <template-type-parameter name="T"/>
16        </template>
17        <inherit><type><classname>is_expr</classname>&lt; T &gt;</type></inherit>
18        <purpose>Boolean metafunction that can be used to enable the operator overloads in the
19        <computeroutput>exops</computeroutput> namespace for the specified non-Proto terminal type.</purpose>
20      </struct>
21      <function name="operator+">
22        <type><emphasis>unspecified</emphasis></type>
23        <template>
24          <template-type-parameter name="Arg"/>
25        </template>
26        <parameter name="arg">
27          <paramtype>Arg &amp;</paramtype>
28        </parameter>
29      </function>
30      <function name="operator+">
31        <type><emphasis>unspecified</emphasis></type>
32        <template>
33          <template-type-parameter name="Arg"/>
34        </template>
35        <parameter name="arg">
36          <paramtype>Arg const &amp;</paramtype>
37        </parameter>
38      </function>
39      <function name="operator-">
40        <type><emphasis>unspecified</emphasis></type>
41        <template>
42          <template-type-parameter name="Arg"/>
43        </template>
44        <parameter name="arg">
45          <paramtype>Arg &amp;</paramtype>
46        </parameter>
47      </function>
48      <function name="operator-">
49        <type><emphasis>unspecified</emphasis></type>
50        <template>
51          <template-type-parameter name="Arg"/>
52        </template>
53        <parameter name="arg">
54          <paramtype>Arg const &amp;</paramtype>
55        </parameter>
56      </function>
57      <function name="operator*">
58        <type><emphasis>unspecified</emphasis></type>
59        <template>
60          <template-type-parameter name="Arg"/>
61        </template>
62        <parameter name="arg">
63          <paramtype>Arg &amp;</paramtype>
64        </parameter>
65      </function>
66      <function name="operator*">
67        <type><emphasis>unspecified</emphasis></type>
68        <template>
69          <template-type-parameter name="Arg"/>
70        </template>
71        <parameter name="arg">
72          <paramtype>Arg const &amp;</paramtype>
73        </parameter>
74      </function>
75      <function name="operator~">
76        <type><emphasis>unspecified</emphasis></type>
77        <template>
78          <template-type-parameter name="Arg"/>
79        </template>
80        <parameter name="arg">
81          <paramtype>Arg &amp;</paramtype>
82        </parameter>
83      </function>
84      <function name="operator~">
85        <type><emphasis>unspecified</emphasis></type>
86        <template>
87          <template-type-parameter name="Arg"/>
88        </template>
89        <parameter name="arg">
90          <paramtype>Arg const &amp;</paramtype>
91        </parameter>
92      </function>
93      <function name="operator&amp;">
94        <type><emphasis>unspecified</emphasis></type>
95        <template>
96          <template-type-parameter name="Arg"/>
97        </template>
98        <parameter name="arg">
99          <paramtype>Arg &amp;</paramtype>
100        </parameter>
101      </function>
102      <function name="operator&amp;">
103        <type><emphasis>unspecified</emphasis></type>
104        <template>
105          <template-type-parameter name="Arg"/>
106        </template>
107        <parameter name="arg">
108          <paramtype>Arg const &amp;</paramtype>
109        </parameter>
110      </function>
111      <function name="operator!">
112        <type><emphasis>unspecified</emphasis></type>
113        <template>
114          <template-type-parameter name="Arg"/>
115        </template>
116        <parameter name="arg">
117          <paramtype>Arg &amp;</paramtype>
118        </parameter>
119      </function>
120      <function name="operator!">
121        <type><emphasis>unspecified</emphasis></type>
122        <template>
123          <template-type-parameter name="Arg"/>
124        </template>
125        <parameter name="arg">
126          <paramtype>Arg const &amp;</paramtype>
127        </parameter>
128      </function>
129      <function name="operator++">
130        <type><emphasis>unspecified</emphasis></type>
131        <template>
132          <template-type-parameter name="Arg"/>
133        </template>
134        <parameter name="arg">
135          <paramtype>Arg &amp;</paramtype>
136        </parameter>
137      </function>
138      <function name="operator++">
139        <type><emphasis>unspecified</emphasis></type>
140        <template>
141          <template-type-parameter name="Arg"/>
142        </template>
143        <parameter name="arg">
144          <paramtype>Arg const &amp;</paramtype>
145        </parameter>
146      </function>
147      <function name="operator--">
148        <type><emphasis>unspecified</emphasis></type>
149        <template>
150          <template-type-parameter name="Arg"/>
151        </template>
152        <parameter name="arg">
153          <paramtype>Arg &amp;</paramtype>
154        </parameter>
155      </function>
156      <function name="operator--">
157        <type><emphasis>unspecified</emphasis></type>
158        <template>
159          <template-type-parameter name="Arg"/>
160        </template>
161        <parameter name="arg">
162          <paramtype>Arg const &amp;</paramtype>
163        </parameter>
164      </function>
165      <function name="operator++">
166        <type><emphasis>unspecified</emphasis></type>
167        <template>
168          <template-type-parameter name="Arg"/>
169        </template>
170        <parameter name="arg">
171          <paramtype>Arg &amp;</paramtype>
172        </parameter>
173        <parameter name="">
174          <paramtype>int</paramtype>
175        </parameter>
176      </function>
177      <function name="operator++">
178        <type><emphasis>unspecified</emphasis></type>
179        <template>
180          <template-type-parameter name="Arg"/>
181        </template>
182        <parameter name="arg">
183          <paramtype>Arg const &amp;</paramtype>
184        </parameter>
185        <parameter name="">
186          <paramtype>int</paramtype>
187        </parameter>
188      </function>
189      <function name="operator--">
190        <type><emphasis>unspecified</emphasis></type>
191        <template>
192          <template-type-parameter name="Arg"/>
193        </template>
194        <parameter name="arg">
195          <paramtype>Arg &amp;</paramtype>
196        </parameter>
197        <parameter name="">
198          <paramtype>int</paramtype>
199        </parameter>
200      </function>
201      <function name="operator--">
202        <type><emphasis>unspecified</emphasis></type>
203        <template>
204          <template-type-parameter name="Arg"/>
205        </template>
206        <parameter name="arg">
207          <paramtype>Arg const &amp;</paramtype>
208        </parameter>
209        <parameter name="">
210          <paramtype>int</paramtype>
211        </parameter>
212      </function>
213      <function name="operator&lt;&lt;">
214        <type><emphasis>unspecified</emphasis></type>
215        <template>
216          <template-type-parameter name="Left"/>
217          <template-type-parameter name="Right"/>
218        </template>
219        <parameter name="left">
220          <paramtype>Left &amp;</paramtype>
221        </parameter>
222        <parameter name="right">
223          <paramtype>Right &amp;</paramtype>
224        </parameter>
225      </function>
226      <function name="operator&lt;&lt;">
227        <type><emphasis>unspecified</emphasis></type>
228        <template>
229          <template-type-parameter name="Left"/>
230          <template-type-parameter name="Right"/>
231        </template>
232        <parameter name="left">
233          <paramtype>Left &amp;</paramtype>
234        </parameter>
235        <parameter name="right">
236          <paramtype>Right const &amp;</paramtype>
237        </parameter>
238      </function>
239      <function name="operator&lt;&lt;">
240        <type><emphasis>unspecified</emphasis></type>
241        <template>
242          <template-type-parameter name="Left"/>
243          <template-type-parameter name="Right"/>
244        </template>
245        <parameter name="left">
246          <paramtype>Left const &amp;</paramtype>
247        </parameter>
248        <parameter name="right">
249          <paramtype>Right &amp;</paramtype>
250        </parameter>
251      </function>
252      <function name="operator&lt;&lt;">
253        <type><emphasis>unspecified</emphasis></type>
254        <template>
255          <template-type-parameter name="Left"/>
256          <template-type-parameter name="Right"/>
257        </template>
258        <parameter name="left">
259          <paramtype>Left const &amp;</paramtype>
260        </parameter>
261        <parameter name="right">
262          <paramtype>Right const &amp;</paramtype>
263        </parameter>
264      </function>
265      <function name="operator&gt;&gt;">
266        <type><emphasis>unspecified</emphasis></type>
267        <template>
268          <template-type-parameter name="Left"/>
269          <template-type-parameter name="Right"/>
270        </template>
271        <parameter name="left">
272          <paramtype>Left &amp;</paramtype>
273        </parameter>
274        <parameter name="right">
275          <paramtype>Right &amp;</paramtype>
276        </parameter>
277      </function>
278      <function name="operator&gt;&gt;">
279        <type><emphasis>unspecified</emphasis></type>
280        <template>
281          <template-type-parameter name="Left"/>
282          <template-type-parameter name="Right"/>
283        </template>
284        <parameter name="left">
285          <paramtype>Left &amp;</paramtype>
286        </parameter>
287        <parameter name="right">
288          <paramtype>Right const &amp;</paramtype>
289        </parameter>
290      </function>
291      <function name="operator&gt;&gt;">
292        <type><emphasis>unspecified</emphasis></type>
293        <template>
294          <template-type-parameter name="Left"/>
295          <template-type-parameter name="Right"/>
296        </template>
297        <parameter name="left">
298          <paramtype>Left const &amp;</paramtype>
299        </parameter>
300        <parameter name="right">
301          <paramtype>Right &amp;</paramtype>
302        </parameter>
303      </function>
304      <function name="operator&gt;&gt;">
305        <type><emphasis>unspecified</emphasis></type>
306        <template>
307          <template-type-parameter name="Left"/>
308          <template-type-parameter name="Right"/>
309        </template>
310        <parameter name="left">
311          <paramtype>Left const &amp;</paramtype>
312        </parameter>
313        <parameter name="right">
314          <paramtype>Right const &amp;</paramtype>
315        </parameter>
316      </function>
317      <function name="operator*">
318        <type><emphasis>unspecified</emphasis></type>
319        <template>
320          <template-type-parameter name="Left"/>
321          <template-type-parameter name="Right"/>
322        </template>
323        <parameter name="left">
324          <paramtype>Left &amp;</paramtype>
325        </parameter>
326        <parameter name="right">
327          <paramtype>Right &amp;</paramtype>
328        </parameter>
329      </function>
330      <function name="operator*">
331        <type><emphasis>unspecified</emphasis></type>
332        <template>
333          <template-type-parameter name="Left"/>
334          <template-type-parameter name="Right"/>
335        </template>
336        <parameter name="left">
337          <paramtype>Left &amp;</paramtype>
338        </parameter>
339        <parameter name="right">
340          <paramtype>Right const &amp;</paramtype>
341        </parameter>
342      </function>
343      <function name="operator*">
344        <type><emphasis>unspecified</emphasis></type>
345        <template>
346          <template-type-parameter name="Left"/>
347          <template-type-parameter name="Right"/>
348        </template>
349        <parameter name="left">
350          <paramtype>Left const &amp;</paramtype>
351        </parameter>
352        <parameter name="right">
353          <paramtype>Right &amp;</paramtype>
354        </parameter>
355      </function>
356      <function name="operator*">
357        <type><emphasis>unspecified</emphasis></type>
358        <template>
359          <template-type-parameter name="Left"/>
360          <template-type-parameter name="Right"/>
361        </template>
362        <parameter name="left">
363          <paramtype>Left const &amp;</paramtype>
364        </parameter>
365        <parameter name="right">
366          <paramtype>Right const &amp;</paramtype>
367        </parameter>
368      </function>
369      <function name="operator/">
370        <type><emphasis>unspecified</emphasis></type>
371        <template>
372          <template-type-parameter name="Left"/>
373          <template-type-parameter name="Right"/>
374        </template>
375        <parameter name="left">
376          <paramtype>Left &amp;</paramtype>
377        </parameter>
378        <parameter name="right">
379          <paramtype>Right &amp;</paramtype>
380        </parameter>
381      </function>
382      <function name="operator/">
383        <type><emphasis>unspecified</emphasis></type>
384        <template>
385          <template-type-parameter name="Left"/>
386          <template-type-parameter name="Right"/>
387        </template>
388        <parameter name="left">
389          <paramtype>Left &amp;</paramtype>
390        </parameter>
391        <parameter name="right">
392          <paramtype>Right const &amp;</paramtype>
393        </parameter>
394      </function>
395      <function name="operator/">
396        <type><emphasis>unspecified</emphasis></type>
397        <template>
398          <template-type-parameter name="Left"/>
399          <template-type-parameter name="Right"/>
400        </template>
401        <parameter name="left">
402          <paramtype>Left const &amp;</paramtype>
403        </parameter>
404        <parameter name="right">
405          <paramtype>Right &amp;</paramtype>
406        </parameter>
407      </function>
408      <function name="operator/">
409        <type><emphasis>unspecified</emphasis></type>
410        <template>
411          <template-type-parameter name="Left"/>
412          <template-type-parameter name="Right"/>
413        </template>
414        <parameter name="left">
415          <paramtype>Left const &amp;</paramtype>
416        </parameter>
417        <parameter name="right">
418          <paramtype>Right const &amp;</paramtype>
419        </parameter>
420      </function>
421      <function name="operator%">
422        <type><emphasis>unspecified</emphasis></type>
423        <template>
424          <template-type-parameter name="Left"/>
425          <template-type-parameter name="Right"/>
426        </template>
427        <parameter name="left">
428          <paramtype>Left &amp;</paramtype>
429        </parameter>
430        <parameter name="right">
431          <paramtype>Right &amp;</paramtype>
432        </parameter>
433      </function>
434      <function name="operator%">
435        <type><emphasis>unspecified</emphasis></type>
436        <template>
437          <template-type-parameter name="Left"/>
438          <template-type-parameter name="Right"/>
439        </template>
440        <parameter name="left">
441          <paramtype>Left &amp;</paramtype>
442        </parameter>
443        <parameter name="right">
444          <paramtype>Right const &amp;</paramtype>
445        </parameter>
446      </function>
447      <function name="operator%">
448        <type><emphasis>unspecified</emphasis></type>
449        <template>
450          <template-type-parameter name="Left"/>
451          <template-type-parameter name="Right"/>
452        </template>
453        <parameter name="left">
454          <paramtype>Left const &amp;</paramtype>
455        </parameter>
456        <parameter name="right">
457          <paramtype>Right &amp;</paramtype>
458        </parameter>
459      </function>
460      <function name="operator%">
461        <type><emphasis>unspecified</emphasis></type>
462        <template>
463          <template-type-parameter name="Left"/>
464          <template-type-parameter name="Right"/>
465        </template>
466        <parameter name="left">
467          <paramtype>Left const &amp;</paramtype>
468        </parameter>
469        <parameter name="right">
470          <paramtype>Right const &amp;</paramtype>
471        </parameter>
472      </function>
473      <function name="operator+">
474        <type><emphasis>unspecified</emphasis></type>
475        <template>
476          <template-type-parameter name="Left"/>
477          <template-type-parameter name="Right"/>
478        </template>
479        <parameter name="left">
480          <paramtype>Left &amp;</paramtype>
481        </parameter>
482        <parameter name="right">
483          <paramtype>Right &amp;</paramtype>
484        </parameter>
485      </function>
486      <function name="operator+">
487        <type><emphasis>unspecified</emphasis></type>
488        <template>
489          <template-type-parameter name="Left"/>
490          <template-type-parameter name="Right"/>
491        </template>
492        <parameter name="left">
493          <paramtype>Left &amp;</paramtype>
494        </parameter>
495        <parameter name="right">
496          <paramtype>Right const &amp;</paramtype>
497        </parameter>
498      </function>
499      <function name="operator+">
500        <type><emphasis>unspecified</emphasis></type>
501        <template>
502          <template-type-parameter name="Left"/>
503          <template-type-parameter name="Right"/>
504        </template>
505        <parameter name="left">
506          <paramtype>Left const &amp;</paramtype>
507        </parameter>
508        <parameter name="right">
509          <paramtype>Right &amp;</paramtype>
510        </parameter>
511      </function>
512      <function name="operator+">
513        <type><emphasis>unspecified</emphasis></type>
514        <template>
515          <template-type-parameter name="Left"/>
516          <template-type-parameter name="Right"/>
517        </template>
518        <parameter name="left">
519          <paramtype>Left const &amp;</paramtype>
520        </parameter>
521        <parameter name="right">
522          <paramtype>Right const &amp;</paramtype>
523        </parameter>
524      </function>
525      <function name="operator-">
526        <type><emphasis>unspecified</emphasis></type>
527        <template>
528          <template-type-parameter name="Left"/>
529          <template-type-parameter name="Right"/>
530        </template>
531        <parameter name="left">
532          <paramtype>Left &amp;</paramtype>
533        </parameter>
534        <parameter name="right">
535          <paramtype>Right &amp;</paramtype>
536        </parameter>
537      </function>
538      <function name="operator-">
539        <type><emphasis>unspecified</emphasis></type>
540        <template>
541          <template-type-parameter name="Left"/>
542          <template-type-parameter name="Right"/>
543        </template>
544        <parameter name="left">
545          <paramtype>Left &amp;</paramtype>
546        </parameter>
547        <parameter name="right">
548          <paramtype>Right const &amp;</paramtype>
549        </parameter>
550      </function>
551      <function name="operator-">
552        <type><emphasis>unspecified</emphasis></type>
553        <template>
554          <template-type-parameter name="Left"/>
555          <template-type-parameter name="Right"/>
556        </template>
557        <parameter name="left">
558          <paramtype>Left const &amp;</paramtype>
559        </parameter>
560        <parameter name="right">
561          <paramtype>Right &amp;</paramtype>
562        </parameter>
563      </function>
564      <function name="operator-">
565        <type><emphasis>unspecified</emphasis></type>
566        <template>
567          <template-type-parameter name="Left"/>
568          <template-type-parameter name="Right"/>
569        </template>
570        <parameter name="left">
571          <paramtype>Left const &amp;</paramtype>
572        </parameter>
573        <parameter name="right">
574          <paramtype>Right const &amp;</paramtype>
575        </parameter>
576      </function>
577      <function name="operator&lt;">
578        <type><emphasis>unspecified</emphasis></type>
579        <template>
580          <template-type-parameter name="Left"/>
581          <template-type-parameter name="Right"/>
582        </template>
583        <parameter name="left">
584          <paramtype>Left &amp;</paramtype>
585        </parameter>
586        <parameter name="right">
587          <paramtype>Right &amp;</paramtype>
588        </parameter>
589      </function>
590      <function name="operator&lt;">
591        <type><emphasis>unspecified</emphasis></type>
592        <template>
593          <template-type-parameter name="Left"/>
594          <template-type-parameter name="Right"/>
595        </template>
596        <parameter name="left">
597          <paramtype>Left &amp;</paramtype>
598        </parameter>
599        <parameter name="right">
600          <paramtype>Right const &amp;</paramtype>
601        </parameter>
602      </function>
603      <function name="operator&lt;">
604        <type><emphasis>unspecified</emphasis></type>
605        <template>
606          <template-type-parameter name="Left"/>
607          <template-type-parameter name="Right"/>
608        </template>
609        <parameter name="left">
610          <paramtype>Left const &amp;</paramtype>
611        </parameter>
612        <parameter name="right">
613          <paramtype>Right &amp;</paramtype>
614        </parameter>
615      </function>
616      <function name="operator&lt;">
617        <type><emphasis>unspecified</emphasis></type>
618        <template>
619          <template-type-parameter name="Left"/>
620          <template-type-parameter name="Right"/>
621        </template>
622        <parameter name="left">
623          <paramtype>Left const &amp;</paramtype>
624        </parameter>
625        <parameter name="right">
626          <paramtype>Right const &amp;</paramtype>
627        </parameter>
628      </function>
629      <function name="operator&gt;">
630        <type><emphasis>unspecified</emphasis></type>
631        <template>
632          <template-type-parameter name="Left"/>
633          <template-type-parameter name="Right"/>
634        </template>
635        <parameter name="left">
636          <paramtype>Left &amp;</paramtype>
637        </parameter>
638        <parameter name="right">
639          <paramtype>Right &amp;</paramtype>
640        </parameter>
641      </function>
642      <function name="operator&gt;">
643        <type><emphasis>unspecified</emphasis></type>
644        <template>
645          <template-type-parameter name="Left"/>
646          <template-type-parameter name="Right"/>
647        </template>
648        <parameter name="left">
649          <paramtype>Left &amp;</paramtype>
650        </parameter>
651        <parameter name="right">
652          <paramtype>Right const &amp;</paramtype>
653        </parameter>
654      </function>
655      <function name="operator&gt;">
656        <type><emphasis>unspecified</emphasis></type>
657        <template>
658          <template-type-parameter name="Left"/>
659          <template-type-parameter name="Right"/>
660        </template>
661        <parameter name="left">
662          <paramtype>Left const &amp;</paramtype>
663        </parameter>
664        <parameter name="right">
665          <paramtype>Right &amp;</paramtype>
666        </parameter>
667      </function>
668      <function name="operator&gt;">
669        <type><emphasis>unspecified</emphasis></type>
670        <template>
671          <template-type-parameter name="Left"/>
672          <template-type-parameter name="Right"/>
673        </template>
674        <parameter name="left">
675          <paramtype>Left const &amp;</paramtype>
676        </parameter>
677        <parameter name="right">
678          <paramtype>Right const &amp;</paramtype>
679        </parameter>
680      </function>
681      <function name="operator&lt;=">
682        <type><emphasis>unspecified</emphasis></type>
683        <template>
684          <template-type-parameter name="Left"/>
685          <template-type-parameter name="Right"/>
686        </template>
687        <parameter name="left">
688          <paramtype>Left &amp;</paramtype>
689        </parameter>
690        <parameter name="right">
691          <paramtype>Right &amp;</paramtype>
692        </parameter>
693      </function>
694      <function name="operator&lt;=">
695        <type><emphasis>unspecified</emphasis></type>
696        <template>
697          <template-type-parameter name="Left"/>
698          <template-type-parameter name="Right"/>
699        </template>
700        <parameter name="left">
701          <paramtype>Left &amp;</paramtype>
702        </parameter>
703        <parameter name="right">
704          <paramtype>Right const &amp;</paramtype>
705        </parameter>
706      </function>
707      <function name="operator&lt;=">
708        <type><emphasis>unspecified</emphasis></type>
709        <template>
710          <template-type-parameter name="Left"/>
711          <template-type-parameter name="Right"/>
712        </template>
713        <parameter name="left">
714          <paramtype>Left const &amp;</paramtype>
715        </parameter>
716        <parameter name="right">
717          <paramtype>Right &amp;</paramtype>
718        </parameter>
719      </function>
720      <function name="operator&lt;=">
721        <type><emphasis>unspecified</emphasis></type>
722        <template>
723          <template-type-parameter name="Left"/>
724          <template-type-parameter name="Right"/>
725        </template>
726        <parameter name="left">
727          <paramtype>Left const &amp;</paramtype>
728        </parameter>
729        <parameter name="right">
730          <paramtype>Right const &amp;</paramtype>
731        </parameter>
732      </function>
733      <function name="operator&gt;=">
734        <type><emphasis>unspecified</emphasis></type>
735        <template>
736          <template-type-parameter name="Left"/>
737          <template-type-parameter name="Right"/>
738        </template>
739        <parameter name="left">
740          <paramtype>Left &amp;</paramtype>
741        </parameter>
742        <parameter name="right">
743          <paramtype>Right &amp;</paramtype>
744        </parameter>
745      </function>
746      <function name="operator&gt;=">
747        <type><emphasis>unspecified</emphasis></type>
748        <template>
749          <template-type-parameter name="Left"/>
750          <template-type-parameter name="Right"/>
751        </template>
752        <parameter name="left">
753          <paramtype>Left &amp;</paramtype>
754        </parameter>
755        <parameter name="right">
756          <paramtype>Right const &amp;</paramtype>
757        </parameter>
758      </function>
759      <function name="operator&gt;=">
760        <type><emphasis>unspecified</emphasis></type>
761        <template>
762          <template-type-parameter name="Left"/>
763          <template-type-parameter name="Right"/>
764        </template>
765        <parameter name="left">
766          <paramtype>Left const &amp;</paramtype>
767        </parameter>
768        <parameter name="right">
769          <paramtype>Right &amp;</paramtype>
770        </parameter>
771      </function>
772      <function name="operator&gt;=">
773        <type><emphasis>unspecified</emphasis></type>
774        <template>
775          <template-type-parameter name="Left"/>
776          <template-type-parameter name="Right"/>
777        </template>
778        <parameter name="left">
779          <paramtype>Left const &amp;</paramtype>
780        </parameter>
781        <parameter name="right">
782          <paramtype>Right const &amp;</paramtype>
783        </parameter>
784      </function>
785      <function name="operator==">
786        <type><emphasis>unspecified</emphasis></type>
787        <template>
788          <template-type-parameter name="Left"/>
789          <template-type-parameter name="Right"/>
790        </template>
791        <parameter name="left">
792          <paramtype>Left &amp;</paramtype>
793        </parameter>
794        <parameter name="right">
795          <paramtype>Right &amp;</paramtype>
796        </parameter>
797      </function>
798      <function name="operator==">
799        <type><emphasis>unspecified</emphasis></type>
800        <template>
801          <template-type-parameter name="Left"/>
802          <template-type-parameter name="Right"/>
803        </template>
804        <parameter name="left">
805          <paramtype>Left &amp;</paramtype>
806        </parameter>
807        <parameter name="right">
808          <paramtype>Right const &amp;</paramtype>
809        </parameter>
810      </function>
811      <function name="operator==">
812        <type><emphasis>unspecified</emphasis></type>
813        <template>
814          <template-type-parameter name="Left"/>
815          <template-type-parameter name="Right"/>
816        </template>
817        <parameter name="left">
818          <paramtype>Left const &amp;</paramtype>
819        </parameter>
820        <parameter name="right">
821          <paramtype>Right &amp;</paramtype>
822        </parameter>
823      </function>
824      <function name="operator==">
825        <type><emphasis>unspecified</emphasis></type>
826        <template>
827          <template-type-parameter name="Left"/>
828          <template-type-parameter name="Right"/>
829        </template>
830        <parameter name="left">
831          <paramtype>Left const &amp;</paramtype>
832        </parameter>
833        <parameter name="right">
834          <paramtype>Right const &amp;</paramtype>
835        </parameter>
836      </function>
837      <function name="operator!=">
838        <type><emphasis>unspecified</emphasis></type>
839        <template>
840          <template-type-parameter name="Left"/>
841          <template-type-parameter name="Right"/>
842        </template>
843        <parameter name="left">
844          <paramtype>Left &amp;</paramtype>
845        </parameter>
846        <parameter name="right">
847          <paramtype>Right &amp;</paramtype>
848        </parameter>
849      </function>
850      <function name="operator!=">
851        <type><emphasis>unspecified</emphasis></type>
852        <template>
853          <template-type-parameter name="Left"/>
854          <template-type-parameter name="Right"/>
855        </template>
856        <parameter name="left">
857          <paramtype>Left &amp;</paramtype>
858        </parameter>
859        <parameter name="right">
860          <paramtype>Right const &amp;</paramtype>
861        </parameter>
862      </function>
863      <function name="operator!=">
864        <type><emphasis>unspecified</emphasis></type>
865        <template>
866          <template-type-parameter name="Left"/>
867          <template-type-parameter name="Right"/>
868        </template>
869        <parameter name="left">
870          <paramtype>Left const &amp;</paramtype>
871        </parameter>
872        <parameter name="right">
873          <paramtype>Right &amp;</paramtype>
874        </parameter>
875      </function>
876      <function name="operator!=">
877        <type><emphasis>unspecified</emphasis></type>
878        <template>
879          <template-type-parameter name="Left"/>
880          <template-type-parameter name="Right"/>
881        </template>
882        <parameter name="left">
883          <paramtype>Left const &amp;</paramtype>
884        </parameter>
885        <parameter name="right">
886          <paramtype>Right const &amp;</paramtype>
887        </parameter>
888      </function>
889      <function name="operator||">
890        <type><emphasis>unspecified</emphasis></type>
891        <template>
892          <template-type-parameter name="Left"/>
893          <template-type-parameter name="Right"/>
894        </template>
895        <parameter name="left">
896          <paramtype>Left &amp;</paramtype>
897        </parameter>
898        <parameter name="right">
899          <paramtype>Right &amp;</paramtype>
900        </parameter>
901      </function>
902      <function name="operator||">
903        <type><emphasis>unspecified</emphasis></type>
904        <template>
905          <template-type-parameter name="Left"/>
906          <template-type-parameter name="Right"/>
907        </template>
908        <parameter name="left">
909          <paramtype>Left &amp;</paramtype>
910        </parameter>
911        <parameter name="right">
912          <paramtype>Right const &amp;</paramtype>
913        </parameter>
914      </function>
915      <function name="operator||">
916        <type><emphasis>unspecified</emphasis></type>
917        <template>
918          <template-type-parameter name="Left"/>
919          <template-type-parameter name="Right"/>
920        </template>
921        <parameter name="left">
922          <paramtype>Left const &amp;</paramtype>
923        </parameter>
924        <parameter name="right">
925          <paramtype>Right &amp;</paramtype>
926        </parameter>
927      </function>
928      <function name="operator||">
929        <type><emphasis>unspecified</emphasis></type>
930        <template>
931          <template-type-parameter name="Left"/>
932          <template-type-parameter name="Right"/>
933        </template>
934        <parameter name="left">
935          <paramtype>Left const &amp;</paramtype>
936        </parameter>
937        <parameter name="right">
938          <paramtype>Right const &amp;</paramtype>
939        </parameter>
940      </function>
941      <function name="operator&amp;&amp;">
942        <type><emphasis>unspecified</emphasis></type>
943        <template>
944          <template-type-parameter name="Left"/>
945          <template-type-parameter name="Right"/>
946        </template>
947        <parameter name="left">
948          <paramtype>Left &amp;</paramtype>
949        </parameter>
950        <parameter name="right">
951          <paramtype>Right &amp;</paramtype>
952        </parameter>
953      </function>
954      <function name="operator&amp;&amp;">
955        <type><emphasis>unspecified</emphasis></type>
956        <template>
957          <template-type-parameter name="Left"/>
958          <template-type-parameter name="Right"/>
959        </template>
960        <parameter name="left">
961          <paramtype>Left &amp;</paramtype>
962        </parameter>
963        <parameter name="right">
964          <paramtype>Right const &amp;</paramtype>
965        </parameter>
966      </function>
967      <function name="operator&amp;&amp;">
968        <type><emphasis>unspecified</emphasis></type>
969        <template>
970          <template-type-parameter name="Left"/>
971          <template-type-parameter name="Right"/>
972        </template>
973        <parameter name="left">
974          <paramtype>Left const &amp;</paramtype>
975        </parameter>
976        <parameter name="right">
977          <paramtype>Right &amp;</paramtype>
978        </parameter>
979      </function>
980      <function name="operator&amp;&amp;">
981        <type><emphasis>unspecified</emphasis></type>
982        <template>
983          <template-type-parameter name="Left"/>
984          <template-type-parameter name="Right"/>
985        </template>
986        <parameter name="left">
987          <paramtype>Left const &amp;</paramtype>
988        </parameter>
989        <parameter name="right">
990          <paramtype>Right const &amp;</paramtype>
991        </parameter>
992      </function>
993      <function name="operator&amp;">
994        <type><emphasis>unspecified</emphasis></type>
995        <template>
996          <template-type-parameter name="Left"/>
997          <template-type-parameter name="Right"/>
998        </template>
999        <parameter name="left">
1000          <paramtype>Left &amp;</paramtype>
1001        </parameter>
1002        <parameter name="right">
1003          <paramtype>Right &amp;</paramtype>
1004        </parameter>
1005      </function>
1006      <function name="operator&amp;">
1007        <type><emphasis>unspecified</emphasis></type>
1008        <template>
1009          <template-type-parameter name="Left"/>
1010          <template-type-parameter name="Right"/>
1011        </template>
1012        <parameter name="left">
1013          <paramtype>Left &amp;</paramtype>
1014        </parameter>
1015        <parameter name="right">
1016          <paramtype>Right const &amp;</paramtype>
1017        </parameter>
1018      </function>
1019      <function name="operator&amp;">
1020        <type><emphasis>unspecified</emphasis></type>
1021        <template>
1022          <template-type-parameter name="Left"/>
1023          <template-type-parameter name="Right"/>
1024        </template>
1025        <parameter name="left">
1026          <paramtype>Left const &amp;</paramtype>
1027        </parameter>
1028        <parameter name="right">
1029          <paramtype>Right &amp;</paramtype>
1030        </parameter>
1031      </function>
1032      <function name="operator&amp;">
1033        <type><emphasis>unspecified</emphasis></type>
1034        <template>
1035          <template-type-parameter name="Left"/>
1036          <template-type-parameter name="Right"/>
1037        </template>
1038        <parameter name="left">
1039          <paramtype>Left const &amp;</paramtype>
1040        </parameter>
1041        <parameter name="right">
1042          <paramtype>Right const &amp;</paramtype>
1043        </parameter>
1044      </function>
1045      <function name="operator|">
1046        <type><emphasis>unspecified</emphasis></type>
1047        <template>
1048          <template-type-parameter name="Left"/>
1049          <template-type-parameter name="Right"/>
1050        </template>
1051        <parameter name="left">
1052          <paramtype>Left &amp;</paramtype>
1053        </parameter>
1054        <parameter name="right">
1055          <paramtype>Right &amp;</paramtype>
1056        </parameter>
1057      </function>
1058      <function name="operator|">
1059        <type><emphasis>unspecified</emphasis></type>
1060        <template>
1061          <template-type-parameter name="Left"/>
1062          <template-type-parameter name="Right"/>
1063        </template>
1064        <parameter name="left">
1065          <paramtype>Left &amp;</paramtype>
1066        </parameter>
1067        <parameter name="right">
1068          <paramtype>Right const &amp;</paramtype>
1069        </parameter>
1070      </function>
1071      <function name="operator|">
1072        <type><emphasis>unspecified</emphasis></type>
1073        <template>
1074          <template-type-parameter name="Left"/>
1075          <template-type-parameter name="Right"/>
1076        </template>
1077        <parameter name="left">
1078          <paramtype>Left const &amp;</paramtype>
1079        </parameter>
1080        <parameter name="right">
1081          <paramtype>Right &amp;</paramtype>
1082        </parameter>
1083      </function>
1084      <function name="operator|">
1085        <type><emphasis>unspecified</emphasis></type>
1086        <template>
1087          <template-type-parameter name="Left"/>
1088          <template-type-parameter name="Right"/>
1089        </template>
1090        <parameter name="left">
1091          <paramtype>Left const &amp;</paramtype>
1092        </parameter>
1093        <parameter name="right">
1094          <paramtype>Right const &amp;</paramtype>
1095        </parameter>
1096      </function>
1097      <function name="operator^">
1098        <type><emphasis>unspecified</emphasis></type>
1099        <template>
1100          <template-type-parameter name="Left"/>
1101          <template-type-parameter name="Right"/>
1102        </template>
1103        <parameter name="left">
1104          <paramtype>Left &amp;</paramtype>
1105        </parameter>
1106        <parameter name="right">
1107          <paramtype>Right &amp;</paramtype>
1108        </parameter>
1109      </function>
1110      <function name="operator^">
1111        <type><emphasis>unspecified</emphasis></type>
1112        <template>
1113          <template-type-parameter name="Left"/>
1114          <template-type-parameter name="Right"/>
1115        </template>
1116        <parameter name="left">
1117          <paramtype>Left &amp;</paramtype>
1118        </parameter>
1119        <parameter name="right">
1120          <paramtype>Right const &amp;</paramtype>
1121        </parameter>
1122      </function>
1123      <function name="operator^">
1124        <type><emphasis>unspecified</emphasis></type>
1125        <template>
1126          <template-type-parameter name="Left"/>
1127          <template-type-parameter name="Right"/>
1128        </template>
1129        <parameter name="left">
1130          <paramtype>Left const &amp;</paramtype>
1131        </parameter>
1132        <parameter name="right">
1133          <paramtype>Right &amp;</paramtype>
1134        </parameter>
1135      </function>
1136      <function name="operator^">
1137        <type><emphasis>unspecified</emphasis></type>
1138        <template>
1139          <template-type-parameter name="Left"/>
1140          <template-type-parameter name="Right"/>
1141        </template>
1142        <parameter name="left">
1143          <paramtype>Left const &amp;</paramtype>
1144        </parameter>
1145        <parameter name="right">
1146          <paramtype>Right const &amp;</paramtype>
1147        </parameter>
1148      </function>
1149      <function name="operator,">
1150        <type><emphasis>unspecified</emphasis></type>
1151        <template>
1152          <template-type-parameter name="Left"/>
1153          <template-type-parameter name="Right"/>
1154        </template>
1155        <parameter name="left">
1156          <paramtype>Left &amp;</paramtype>
1157        </parameter>
1158        <parameter name="right">
1159          <paramtype>Right &amp;</paramtype>
1160        </parameter>
1161      </function>
1162      <function name="operator,">
1163        <type><emphasis>unspecified</emphasis></type>
1164        <template>
1165          <template-type-parameter name="Left"/>
1166          <template-type-parameter name="Right"/>
1167        </template>
1168        <parameter name="left">
1169          <paramtype>Left &amp;</paramtype>
1170        </parameter>
1171        <parameter name="right">
1172          <paramtype>Right const &amp;</paramtype>
1173        </parameter>
1174      </function>
1175      <function name="operator,">
1176        <type><emphasis>unspecified</emphasis></type>
1177        <template>
1178          <template-type-parameter name="Left"/>
1179          <template-type-parameter name="Right"/>
1180        </template>
1181        <parameter name="left">
1182          <paramtype>Left const &amp;</paramtype>
1183        </parameter>
1184        <parameter name="right">
1185          <paramtype>Right &amp;</paramtype>
1186        </parameter>
1187      </function>
1188      <function name="operator,">
1189        <type><emphasis>unspecified</emphasis></type>
1190        <template>
1191          <template-type-parameter name="Left"/>
1192          <template-type-parameter name="Right"/>
1193        </template>
1194        <parameter name="left">
1195          <paramtype>Left const &amp;</paramtype>
1196        </parameter>
1197        <parameter name="right">
1198          <paramtype>Right const &amp;</paramtype>
1199        </parameter>
1200      </function>
1201      <function name="operator-&gt;*">
1202        <type><emphasis>unspecified</emphasis></type>
1203        <template>
1204          <template-type-parameter name="Left"/>
1205          <template-type-parameter name="Right"/>
1206        </template>
1207        <parameter name="left">
1208          <paramtype>Left &amp;</paramtype>
1209        </parameter>
1210        <parameter name="right">
1211          <paramtype>Right &amp;</paramtype>
1212        </parameter>
1213      </function>
1214      <function name="operator-&gt;*">
1215        <type><emphasis>unspecified</emphasis></type>
1216        <template>
1217          <template-type-parameter name="Left"/>
1218          <template-type-parameter name="Right"/>
1219        </template>
1220        <parameter name="left">
1221          <paramtype>Left &amp;</paramtype>
1222        </parameter>
1223        <parameter name="right">
1224          <paramtype>Right const &amp;</paramtype>
1225        </parameter>
1226      </function>
1227      <function name="operator-&gt;*">
1228        <type><emphasis>unspecified</emphasis></type>
1229        <template>
1230          <template-type-parameter name="Left"/>
1231          <template-type-parameter name="Right"/>
1232        </template>
1233        <parameter name="left">
1234          <paramtype>Left const &amp;</paramtype>
1235        </parameter>
1236        <parameter name="right">
1237          <paramtype>Right &amp;</paramtype>
1238        </parameter>
1239      </function>
1240      <function name="operator-&gt;*">
1241        <type><emphasis>unspecified</emphasis></type>
1242        <template>
1243          <template-type-parameter name="Left"/>
1244          <template-type-parameter name="Right"/>
1245        </template>
1246        <parameter name="left">
1247          <paramtype>Left const &amp;</paramtype>
1248        </parameter>
1249        <parameter name="right">
1250          <paramtype>Right const &amp;</paramtype>
1251        </parameter>
1252      </function>
1253      <function name="operator&lt;&lt;=">
1254        <type><emphasis>unspecified</emphasis></type>
1255        <template>
1256          <template-type-parameter name="Left"/>
1257          <template-type-parameter name="Right"/>
1258        </template>
1259        <parameter name="left">
1260          <paramtype>Left &amp;</paramtype>
1261        </parameter>
1262        <parameter name="right">
1263          <paramtype>Right &amp;</paramtype>
1264        </parameter>
1265      </function>
1266      <function name="operator&lt;&lt;=">
1267        <type><emphasis>unspecified</emphasis></type>
1268        <template>
1269          <template-type-parameter name="Left"/>
1270          <template-type-parameter name="Right"/>
1271        </template>
1272        <parameter name="left">
1273          <paramtype>Left &amp;</paramtype>
1274        </parameter>
1275        <parameter name="right">
1276          <paramtype>Right const &amp;</paramtype>
1277        </parameter>
1278      </function>
1279      <function name="operator&lt;&lt;=">
1280        <type><emphasis>unspecified</emphasis></type>
1281        <template>
1282          <template-type-parameter name="Left"/>
1283          <template-type-parameter name="Right"/>
1284        </template>
1285        <parameter name="left">
1286          <paramtype>Left const &amp;</paramtype>
1287        </parameter>
1288        <parameter name="right">
1289          <paramtype>Right &amp;</paramtype>
1290        </parameter>
1291      </function>
1292      <function name="operator&lt;&lt;=">
1293        <type><emphasis>unspecified</emphasis></type>
1294        <template>
1295          <template-type-parameter name="Left"/>
1296          <template-type-parameter name="Right"/>
1297        </template>
1298        <parameter name="left">
1299          <paramtype>Left const &amp;</paramtype>
1300        </parameter>
1301        <parameter name="right">
1302          <paramtype>Right const &amp;</paramtype>
1303        </parameter>
1304      </function>
1305      <function name="operator&gt;&gt;=">
1306        <type><emphasis>unspecified</emphasis></type>
1307        <template>
1308          <template-type-parameter name="Left"/>
1309          <template-type-parameter name="Right"/>
1310        </template>
1311        <parameter name="left">
1312          <paramtype>Left &amp;</paramtype>
1313        </parameter>
1314        <parameter name="right">
1315          <paramtype>Right &amp;</paramtype>
1316        </parameter>
1317      </function>
1318      <function name="operator&gt;&gt;=">
1319        <type><emphasis>unspecified</emphasis></type>
1320        <template>
1321          <template-type-parameter name="Left"/>
1322          <template-type-parameter name="Right"/>
1323        </template>
1324        <parameter name="left">
1325          <paramtype>Left &amp;</paramtype>
1326        </parameter>
1327        <parameter name="right">
1328          <paramtype>Right const &amp;</paramtype>
1329        </parameter>
1330      </function>
1331      <function name="operator&gt;&gt;=">
1332        <type><emphasis>unspecified</emphasis></type>
1333        <template>
1334          <template-type-parameter name="Left"/>
1335          <template-type-parameter name="Right"/>
1336        </template>
1337        <parameter name="left">
1338          <paramtype>Left const &amp;</paramtype>
1339        </parameter>
1340        <parameter name="right">
1341          <paramtype>Right &amp;</paramtype>
1342        </parameter>
1343      </function>
1344      <function name="operator&gt;&gt;=">
1345        <type><emphasis>unspecified</emphasis></type>
1346        <template>
1347          <template-type-parameter name="Left"/>
1348          <template-type-parameter name="Right"/>
1349        </template>
1350        <parameter name="left">
1351          <paramtype>Left const &amp;</paramtype>
1352        </parameter>
1353        <parameter name="right">
1354          <paramtype>Right const &amp;</paramtype>
1355        </parameter>
1356      </function>
1357      <function name="operator*=">
1358        <type><emphasis>unspecified</emphasis></type>
1359        <template>
1360          <template-type-parameter name="Left"/>
1361          <template-type-parameter name="Right"/>
1362        </template>
1363        <parameter name="left">
1364          <paramtype>Left &amp;</paramtype>
1365        </parameter>
1366        <parameter name="right">
1367          <paramtype>Right &amp;</paramtype>
1368        </parameter>
1369      </function>
1370      <function name="operator*=">
1371        <type><emphasis>unspecified</emphasis></type>
1372        <template>
1373          <template-type-parameter name="Left"/>
1374          <template-type-parameter name="Right"/>
1375        </template>
1376        <parameter name="left">
1377          <paramtype>Left &amp;</paramtype>
1378        </parameter>
1379        <parameter name="right">
1380          <paramtype>Right const &amp;</paramtype>
1381        </parameter>
1382      </function>
1383      <function name="operator*=">
1384        <type><emphasis>unspecified</emphasis></type>
1385        <template>
1386          <template-type-parameter name="Left"/>
1387          <template-type-parameter name="Right"/>
1388        </template>
1389        <parameter name="left">
1390          <paramtype>Left const &amp;</paramtype>
1391        </parameter>
1392        <parameter name="right">
1393          <paramtype>Right &amp;</paramtype>
1394        </parameter>
1395      </function>
1396      <function name="operator*=">
1397        <type><emphasis>unspecified</emphasis></type>
1398        <template>
1399          <template-type-parameter name="Left"/>
1400          <template-type-parameter name="Right"/>
1401        </template>
1402        <parameter name="left">
1403          <paramtype>Left const &amp;</paramtype>
1404        </parameter>
1405        <parameter name="right">
1406          <paramtype>Right const &amp;</paramtype>
1407        </parameter>
1408      </function>
1409      <function name="operator/=">
1410        <type><emphasis>unspecified</emphasis></type>
1411        <template>
1412          <template-type-parameter name="Left"/>
1413          <template-type-parameter name="Right"/>
1414        </template>
1415        <parameter name="left">
1416          <paramtype>Left &amp;</paramtype>
1417        </parameter>
1418        <parameter name="right">
1419          <paramtype>Right &amp;</paramtype>
1420        </parameter>
1421      </function>
1422      <function name="operator/=">
1423        <type><emphasis>unspecified</emphasis></type>
1424        <template>
1425          <template-type-parameter name="Left"/>
1426          <template-type-parameter name="Right"/>
1427        </template>
1428        <parameter name="left">
1429          <paramtype>Left &amp;</paramtype>
1430        </parameter>
1431        <parameter name="right">
1432          <paramtype>Right const &amp;</paramtype>
1433        </parameter>
1434      </function>
1435      <function name="operator/=">
1436        <type><emphasis>unspecified</emphasis></type>
1437        <template>
1438          <template-type-parameter name="Left"/>
1439          <template-type-parameter name="Right"/>
1440        </template>
1441        <parameter name="left">
1442          <paramtype>Left const &amp;</paramtype>
1443        </parameter>
1444        <parameter name="right">
1445          <paramtype>Right &amp;</paramtype>
1446        </parameter>
1447      </function>
1448      <function name="operator/=">
1449        <type><emphasis>unspecified</emphasis></type>
1450        <template>
1451          <template-type-parameter name="Left"/>
1452          <template-type-parameter name="Right"/>
1453        </template>
1454        <parameter name="left">
1455          <paramtype>Left const &amp;</paramtype>
1456        </parameter>
1457        <parameter name="right">
1458          <paramtype>Right const &amp;</paramtype>
1459        </parameter>
1460      </function>
1461      <function name="operator%=">
1462        <type><emphasis>unspecified</emphasis></type>
1463        <template>
1464          <template-type-parameter name="Left"/>
1465          <template-type-parameter name="Right"/>
1466        </template>
1467        <parameter name="left">
1468          <paramtype>Left &amp;</paramtype>
1469        </parameter>
1470        <parameter name="right">
1471          <paramtype>Right &amp;</paramtype>
1472        </parameter>
1473      </function>
1474      <function name="operator%=">
1475        <type><emphasis>unspecified</emphasis></type>
1476        <template>
1477          <template-type-parameter name="Left"/>
1478          <template-type-parameter name="Right"/>
1479        </template>
1480        <parameter name="left">
1481          <paramtype>Left &amp;</paramtype>
1482        </parameter>
1483        <parameter name="right">
1484          <paramtype>Right const &amp;</paramtype>
1485        </parameter>
1486      </function>
1487      <function name="operator%=">
1488        <type><emphasis>unspecified</emphasis></type>
1489        <template>
1490          <template-type-parameter name="Left"/>
1491          <template-type-parameter name="Right"/>
1492        </template>
1493        <parameter name="left">
1494          <paramtype>Left const &amp;</paramtype>
1495        </parameter>
1496        <parameter name="right">
1497          <paramtype>Right &amp;</paramtype>
1498        </parameter>
1499      </function>
1500      <function name="operator%=">
1501        <type><emphasis>unspecified</emphasis></type>
1502        <template>
1503          <template-type-parameter name="Left"/>
1504          <template-type-parameter name="Right"/>
1505        </template>
1506        <parameter name="left">
1507          <paramtype>Left const &amp;</paramtype>
1508        </parameter>
1509        <parameter name="right">
1510          <paramtype>Right const &amp;</paramtype>
1511        </parameter>
1512      </function>
1513      <function name="operator+=">
1514        <type><emphasis>unspecified</emphasis></type>
1515        <template>
1516          <template-type-parameter name="Left"/>
1517          <template-type-parameter name="Right"/>
1518        </template>
1519        <parameter name="left">
1520          <paramtype>Left &amp;</paramtype>
1521        </parameter>
1522        <parameter name="right">
1523          <paramtype>Right &amp;</paramtype>
1524        </parameter>
1525      </function>
1526      <function name="operator+=">
1527        <type><emphasis>unspecified</emphasis></type>
1528        <template>
1529          <template-type-parameter name="Left"/>
1530          <template-type-parameter name="Right"/>
1531        </template>
1532        <parameter name="left">
1533          <paramtype>Left &amp;</paramtype>
1534        </parameter>
1535        <parameter name="right">
1536          <paramtype>Right const &amp;</paramtype>
1537        </parameter>
1538      </function>
1539      <function name="operator+=">
1540        <type><emphasis>unspecified</emphasis></type>
1541        <template>
1542          <template-type-parameter name="Left"/>
1543          <template-type-parameter name="Right"/>
1544        </template>
1545        <parameter name="left">
1546          <paramtype>Left const &amp;</paramtype>
1547        </parameter>
1548        <parameter name="right">
1549          <paramtype>Right &amp;</paramtype>
1550        </parameter>
1551      </function>
1552      <function name="operator+=">
1553        <type><emphasis>unspecified</emphasis></type>
1554        <template>
1555          <template-type-parameter name="Left"/>
1556          <template-type-parameter name="Right"/>
1557        </template>
1558        <parameter name="left">
1559          <paramtype>Left const &amp;</paramtype>
1560        </parameter>
1561        <parameter name="right">
1562          <paramtype>Right const &amp;</paramtype>
1563        </parameter>
1564      </function>
1565      <function name="operator-=">
1566        <type><emphasis>unspecified</emphasis></type>
1567        <template>
1568          <template-type-parameter name="Left"/>
1569          <template-type-parameter name="Right"/>
1570        </template>
1571        <parameter name="left">
1572          <paramtype>Left &amp;</paramtype>
1573        </parameter>
1574        <parameter name="right">
1575          <paramtype>Right &amp;</paramtype>
1576        </parameter>
1577      </function>
1578      <function name="operator-=">
1579        <type><emphasis>unspecified</emphasis></type>
1580        <template>
1581          <template-type-parameter name="Left"/>
1582          <template-type-parameter name="Right"/>
1583        </template>
1584        <parameter name="left">
1585          <paramtype>Left &amp;</paramtype>
1586        </parameter>
1587        <parameter name="right">
1588          <paramtype>Right const &amp;</paramtype>
1589        </parameter>
1590      </function>
1591      <function name="operator-=">
1592        <type><emphasis>unspecified</emphasis></type>
1593        <template>
1594          <template-type-parameter name="Left"/>
1595          <template-type-parameter name="Right"/>
1596        </template>
1597        <parameter name="left">
1598          <paramtype>Left const &amp;</paramtype>
1599        </parameter>
1600        <parameter name="right">
1601          <paramtype>Right &amp;</paramtype>
1602        </parameter>
1603      </function>
1604      <function name="operator-=">
1605        <type><emphasis>unspecified</emphasis></type>
1606        <template>
1607          <template-type-parameter name="Left"/>
1608          <template-type-parameter name="Right"/>
1609        </template>
1610        <parameter name="left">
1611          <paramtype>Left const &amp;</paramtype>
1612        </parameter>
1613        <parameter name="right">
1614          <paramtype>Right const &amp;</paramtype>
1615        </parameter>
1616      </function>
1617      <function name="operator&amp;=">
1618        <type><emphasis>unspecified</emphasis></type>
1619        <template>
1620          <template-type-parameter name="Left"/>
1621          <template-type-parameter name="Right"/>
1622        </template>
1623        <parameter name="left">
1624          <paramtype>Left &amp;</paramtype>
1625        </parameter>
1626        <parameter name="right">
1627          <paramtype>Right &amp;</paramtype>
1628        </parameter>
1629      </function>
1630      <function name="operator&amp;=">
1631        <type><emphasis>unspecified</emphasis></type>
1632        <template>
1633          <template-type-parameter name="Left"/>
1634          <template-type-parameter name="Right"/>
1635        </template>
1636        <parameter name="left">
1637          <paramtype>Left &amp;</paramtype>
1638        </parameter>
1639        <parameter name="right">
1640          <paramtype>Right const &amp;</paramtype>
1641        </parameter>
1642      </function>
1643      <function name="operator&amp;=">
1644        <type><emphasis>unspecified</emphasis></type>
1645        <template>
1646          <template-type-parameter name="Left"/>
1647          <template-type-parameter name="Right"/>
1648        </template>
1649        <parameter name="left">
1650          <paramtype>Left const &amp;</paramtype>
1651        </parameter>
1652        <parameter name="right">
1653          <paramtype>Right &amp;</paramtype>
1654        </parameter>
1655      </function>
1656      <function name="operator&amp;=">
1657        <type><emphasis>unspecified</emphasis></type>
1658        <template>
1659          <template-type-parameter name="Left"/>
1660          <template-type-parameter name="Right"/>
1661        </template>
1662        <parameter name="left">
1663          <paramtype>Left const &amp;</paramtype>
1664        </parameter>
1665        <parameter name="right">
1666          <paramtype>Right const &amp;</paramtype>
1667        </parameter>
1668      </function>
1669      <function name="operator|=">
1670        <type><emphasis>unspecified</emphasis></type>
1671        <template>
1672          <template-type-parameter name="Left"/>
1673          <template-type-parameter name="Right"/>
1674        </template>
1675        <parameter name="left">
1676          <paramtype>Left &amp;</paramtype>
1677        </parameter>
1678        <parameter name="right">
1679          <paramtype>Right &amp;</paramtype>
1680        </parameter>
1681      </function>
1682      <function name="operator|=">
1683        <type><emphasis>unspecified</emphasis></type>
1684        <template>
1685          <template-type-parameter name="Left"/>
1686          <template-type-parameter name="Right"/>
1687        </template>
1688        <parameter name="left">
1689          <paramtype>Left &amp;</paramtype>
1690        </parameter>
1691        <parameter name="right">
1692          <paramtype>Right const &amp;</paramtype>
1693        </parameter>
1694      </function>
1695      <function name="operator|=">
1696        <type><emphasis>unspecified</emphasis></type>
1697        <template>
1698          <template-type-parameter name="Left"/>
1699          <template-type-parameter name="Right"/>
1700        </template>
1701        <parameter name="left">
1702          <paramtype>Left const &amp;</paramtype>
1703        </parameter>
1704        <parameter name="right">
1705          <paramtype>Right &amp;</paramtype>
1706        </parameter>
1707      </function>
1708      <function name="operator|=">
1709        <type><emphasis>unspecified</emphasis></type>
1710        <template>
1711          <template-type-parameter name="Left"/>
1712          <template-type-parameter name="Right"/>
1713        </template>
1714        <parameter name="left">
1715          <paramtype>Left const &amp;</paramtype>
1716        </parameter>
1717        <parameter name="right">
1718          <paramtype>Right const &amp;</paramtype>
1719        </parameter>
1720      </function>
1721      <function name="operator^=">
1722        <type><emphasis>unspecified</emphasis></type>
1723        <template>
1724          <template-type-parameter name="Left"/>
1725          <template-type-parameter name="Right"/>
1726        </template>
1727        <parameter name="left">
1728          <paramtype>Left &amp;</paramtype>
1729        </parameter>
1730        <parameter name="right">
1731          <paramtype>Right &amp;</paramtype>
1732        </parameter>
1733      </function>
1734      <function name="operator^=">
1735        <type><emphasis>unspecified</emphasis></type>
1736        <template>
1737          <template-type-parameter name="Left"/>
1738          <template-type-parameter name="Right"/>
1739        </template>
1740        <parameter name="left">
1741          <paramtype>Left &amp;</paramtype>
1742        </parameter>
1743        <parameter name="right">
1744          <paramtype>Right const &amp;</paramtype>
1745        </parameter>
1746      </function>
1747      <function name="operator^=">
1748        <type><emphasis>unspecified</emphasis></type>
1749        <template>
1750          <template-type-parameter name="Left"/>
1751          <template-type-parameter name="Right"/>
1752        </template>
1753        <parameter name="left">
1754          <paramtype>Left const &amp;</paramtype>
1755        </parameter>
1756        <parameter name="right">
1757          <paramtype>Right &amp;</paramtype>
1758        </parameter>
1759      </function>
1760      <function name="operator^=">
1761        <type><emphasis>unspecified</emphasis></type>
1762        <template>
1763          <template-type-parameter name="Left"/>
1764          <template-type-parameter name="Right"/>
1765        </template>
1766        <parameter name="left">
1767          <paramtype>Left const &amp;</paramtype>
1768        </parameter>
1769        <parameter name="right">
1770          <paramtype>Right const &amp;</paramtype>
1771        </parameter>
1772      </function>
1773      <function name="if_else">
1774        <type>typename <classname>proto::result_of::make_expr</classname>&lt;
1775        <classname>proto::tag::if_else_</classname>,
1776        <classname>proto::deduce_domain</classname>,
1777        A0 const &amp;,
1778        A1 const &amp;,
1779        A2 const &amp;
1780      &gt;::type const</type>
1781        <template>
1782          <template-type-parameter name="A0"/>
1783          <template-type-parameter name="A1"/>
1784          <template-type-parameter name="A2"/>
1785        </template>
1786        <parameter name="a0">
1787          <paramtype>A0 const &amp;</paramtype>
1788        </parameter>
1789        <parameter name="a1">
1790          <paramtype>A1 const &amp;</paramtype>
1791        </parameter>
1792        <parameter name="a2">
1793          <paramtype>A2 const &amp;</paramtype>
1794        </parameter>
1795      </function>
1796    </namespace>
1797  </namespace>
1798  <macro name="BOOST_PROTO_DEFINE_OPERATORS" kind="functionlike">
1799    <macro-parameter name="Trait"/>
1800    <macro-parameter name="Domain"/>
1801    <purpose>Defines a complete set of expression template-building operator overloads for use
1802      with non-Proto terminal types.</purpose>
1803    <description>
1804      <para>
1805        With <computeroutput>BOOST_PROTO_DEFINE_OPERATORS()</computeroutput>, it is possible to
1806        non-intrusively adapt an existing (non-Proto) type to be a Proto terminal.
1807      </para>
1808      <para>
1809        <computeroutput>Trait</computeroutput> is the name of a unary Boolean metafunction that returns
1810        true for any types you would like to treat as Proto terminals.
1811      </para>
1812      <para>
1813        <computeroutput>Domain</computeroutput> is the name of the Proto domain associated with
1814        these new Proto terminals. You may use
1815        <computeroutput><classname alt="boost::proto::default_domain">proto::default_domain</classname></computeroutput>
1816        for the <computeroutput>Domain</computeroutput> if you do not wish to associate these terminals
1817        with any domain.
1818      </para>
1819      <para>
1820        <emphasis role="bold">Example:</emphasis>
1821        <programlisting>namespace My {
1822  // A non-Proto terminal type
1823  struct S {};
1824
1825  // A unary Boolean metafunction that returns true for type S
1826  template&lt;typename T&gt; struct IsS : mpl::false_ {};
1827  template&lt;&gt; struct IsS&lt;S&gt; : mpl::true_ {};
1828
1829  // Make S a Proto terminal non-intrusively by defining the
1830  // appropriate operator overloads. This should be in the same
1831  // namespace as S so that these overloads can be found by
1832  // argument-dependent lookup
1833  <macroname>BOOST_PROTO_DEFINE_OPERATORS</macroname>(IsS, proto::default_domain)
1834}
1835
1836int main() {
1837  My::S s1, s2;
1838
1839  // OK, this builds a Proto expression template:
1840  s1 + s2;
1841}</programlisting>
1842      </para>
1843    </description>
1844  </macro>
1845</header>
1846