[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 0f29420 1/6: Import PETE examples and html do
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 0f29420 1/6: Import PETE examples and html documentation |
Date: |
Fri, 19 Mar 2021 17:54:41 -0400 (EDT) |
branch: master
commit 0f294207737e4389505ba6f24fa6ef0d9c8c7b8d
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Import PETE examples and html documentation
---
tools/pete-2.1.1/examples/DDJ/Listing1.cpp | 87 +
tools/pete-2.1.1/examples/DDJ/Listing1Defs.in | 6 +
tools/pete-2.1.1/examples/DDJ/Listing1Operators.h | 3106 +++++++++++
tools/pete-2.1.1/examples/DDJ/Listing2.cpp | 122 +
tools/pete-2.1.1/examples/DDJ/Listing2Defs.in | 7 +
tools/pete-2.1.1/examples/DDJ/Listing2Operators.h | 5620 ++++++++++++++++++++
tools/pete-2.1.1/examples/DDJ/Listing3.cpp | 149 +
tools/pete-2.1.1/examples/DDJ/Listing4.cpp | 187 +
tools/pete-2.1.1/examples/DDJ/Makefile.user | 74 +
tools/pete-2.1.1/examples/DDJ/README | 38 +
tools/pete-2.1.1/examples/DDJ/makefile | 74 +
tools/pete-2.1.1/examples/Mixed/Eval.h | 140 +
tools/pete-2.1.1/examples/Mixed/Makefile.user | 61 +
tools/pete-2.1.1/examples/Mixed/Mixed.cpp | 95 +
tools/pete-2.1.1/examples/Mixed/MixedDefs.in | 8 +
tools/pete-2.1.1/examples/Mixed/MixedOperators.h | 5620 ++++++++++++++++++++
tools/pete-2.1.1/examples/Mixed/README | 9 +
tools/pete-2.1.1/examples/Mixed/makefile | 60 +
tools/pete-2.1.1/examples/RGB/README | 17 +
tools/pete-2.1.1/examples/RGB/RGB.cpp | 43 +
tools/pete-2.1.1/examples/RGB/RGB.h | 180 +
tools/pete-2.1.1/examples/RGB/RGBDefs.in | 5 +
tools/pete-2.1.1/examples/RGB/RGBOperators.h | 3007 +++++++++++
tools/pete-2.1.1/examples/RGB/makefile | 60 +
tools/pete-2.1.1/examples/TArray/ForEachInOrder.h | 274 +
tools/pete-2.1.1/examples/TArray/README | 19 +
tools/pete-2.1.1/examples/TArray/TArray.cpp | 64 +
tools/pete-2.1.1/examples/TArray/TArray.h | 394 ++
tools/pete-2.1.1/examples/TArray/TArrayDefs.in | 4 +
tools/pete-2.1.1/examples/TArray/TArrayOperators.h | 2964 +++++++++++
tools/pete-2.1.1/examples/TArray/makefile | 58 +
tools/pete-2.1.1/examples/Vec3/README | 15 +
tools/pete-2.1.1/examples/Vec3/Vec3.cpp | 72 +
tools/pete-2.1.1/examples/Vec3/Vec3.h | 214 +
tools/pete-2.1.1/examples/Vec3/Vec3Defs.in | 4 +
tools/pete-2.1.1/examples/Vec3/Vec3Operators.h | 2964 +++++++++++
tools/pete-2.1.1/examples/Vec3/makefile | 60 +
tools/pete-2.1.1/examples/Vector/Eval.h | 165 +
tools/pete-2.1.1/examples/Vector/Makefile.user | 62 +
tools/pete-2.1.1/examples/Vector/README | 39 +
tools/pete-2.1.1/examples/Vector/Vector.cpp | 69 +
tools/pete-2.1.1/examples/Vector/VectorDefs.in | 4 +
tools/pete-2.1.1/examples/Vector/VectorOperators.h | 3106 +++++++++++
tools/pete-2.1.1/examples/Vector/makefile | 60 +
tools/pete-2.1.1/examples/makefile | 72 +
tools/pete-2.1.1/html/PETETutorials.pdf | 2163 ++++++++
tools/pete-2.1.1/html/PeteOps.html | 255 +
tools/pete-2.1.1/html/background.html | 779 +++
tools/pete-2.1.1/html/banner.gif | Bin 0 -> 5357 bytes
tools/pete-2.1.1/html/builtin.html | 66 +
tools/pete-2.1.1/html/index.html | 49 +
tools/pete-2.1.1/html/introduction.html | 80 +
tools/pete-2.1.1/html/legal.html | 54 +
tools/pete-2.1.1/html/makeoperators.html | 450 ++
tools/pete-2.1.1/html/stl.html | 97 +
tools/pete-2.1.1/html/tree.gif | Bin 0 -> 2163 bytes
tools/pete-2.1.1/html/tut-1.html | 732 +++
tools/pete-2.1.1/html/tut-2.html | 406 ++
tools/pete-2.1.1/html/tut-3.html | 766 +++
59 files changed, 35355 insertions(+)
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1.cpp
b/tools/pete-2.1.1/examples/DDJ/Listing1.cpp
new file mode 100644
index 0000000..6ec7ba1
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1.cpp
@@ -0,0 +1,87 @@
+#include <iostream.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing1Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors so that
+// operators know what to stick in the leaves of the expression tree. In this
+// case, we store a const_iterator at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+ typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+ inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin();
}
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class AssignOp, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const AssignOp &op, const RHS
&rhs)
+{
+ typename vector<T, Allocator>::iterator iterLHS = lhs.begin();
+ while (iterLHS != lhs.end())
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. DereferenceLeaf gets the
+ // values at each node by deferencing an iterator, and the tag
+ // OpCombine tells forEach to use the operator tags in the expression
+ // to combine values together.
+
+ op(*iterLHS, forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+ // Increment the LHS iterator.
+
+ iterLHS++;
+
+ // Now, we have to increment the iterators for everything on the RHS.
+ // The results don't need to be combined so we use a NullCombiner.
+
+ forEach(rhs, IncrementLeaf(), NullCombine());
+ }
+}
+
+int main()
+{
+ int i;
+ const int n = 10;
+ vector<double> A, C, E(n);
+ vector<int> B, D;
+
+ for (i = 0; i < n; ++i)
+ {
+ A.push_back(i);
+ B.push_back(2*i);
+ C.push_back(3*i);
+ D.push_back(i);
+ }
+
+ A += -B + 2 * C;
+
+ assign(B, 2);
+ assign(D, A + B * C);
+ A += where(D < 30, B, C);
+
+ assign(E, C);
+ E += E - 4 / (sin(C) + 1);
+
+ for (i = 0; i < n; ++i)
+ {
+ cout << " A[" << i << "] = " << A[i]
+ << " B[" << i << "] = " << B[i]
+ << " C[" << i << "] = " << C[i]
+ << " D[" << i << "] = " << D[i]
+ << " E[" << i << "] = " << E[i]
+ << endl;
+ }
+
+ return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in
b/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in
new file mode 100644
index 0000000..f158cd0
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in
@@ -0,0 +1,6 @@
+classes
+-----
+ ARG = "class T[n], class Allocator[n]"
+ CLASS = "vector<T[n], Allocator[n]>"
+
+
\ No newline at end of file
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h
b/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h
new file mode 100644
index 0000000..7b38e91
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h
@@ -0,0 +1,3106 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Listing1Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2, Allocator2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T2, Allocator2> >::make(l)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& assign(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator+=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator-=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator*=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator/=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator%=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator|=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator&=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator^=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator<<=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator>>=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2.cpp
b/tools/pete-2.1.1/examples/DDJ/Listing2.cpp
new file mode 100644
index 0000000..2704aeb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2.cpp
@@ -0,0 +1,122 @@
+#include <iostream.h>
+#include <list.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing2Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors and lists
+// so that operators know what to stick in the leaves of the expression tree.
+// In these cases, we store const_iterators at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+ typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+ inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin();
}
+};
+
+template<class T, class Allocator>
+struct CreateLeaf<list<T, Allocator> >
+{
+ typedef typename list<T, Allocator>::const_iterator Leaf_t;
+ inline static Leaf_t make(const list<T, Allocator> &a) { return a.begin(); }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+ for (int i = 0; i < lhs.size(); ++i)
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. DereferenceLeaf gets the
+ // values at each node by deferencing an iterator, and the tag
+ // OpCombine tells forEach to use the operator tags in the expression
+ // to combine values together.
+
+ op(lhs[i], forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+ // Now, we have to increment the iterators for everything on the RHS.
+ // The results don't need to be combined so we use a NullCombiner.
+
+ forEach(rhs, IncrementLeaf(), NullCombine());
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Loop over list and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(list<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+ typename list<T, Allocator>::iterator i = lhs.begin();
+ while (i != lhs.end())
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. DereferenceLeaf gets the
+ // values at each node by deferencing an iterator, and the tag
+ // OpCombine tells forEach to use the operator tags in the expression
+ // to combine values together.
+
+ op(*i++, forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+ // Now, we have to increment the iterators for everything on the RHS.
+ // The results don't need to be combined so we use a NullCombiner.
+
+ forEach(rhs, IncrementLeaf(), NullCombine());
+ }
+}
+
+int main()
+{
+ int i;
+ const int n = 10;
+ vector<double> A, C;
+ vector<int> B;
+ list<int> D;
+ list<double> E;
+
+ for (i = 0; i < n; ++i)
+ {
+ A.push_back(i);
+ B.push_back(2*i);
+ C.push_back(3*i);
+ D.push_back(i);
+ E.push_back(0.0);
+ }
+
+ A += -B + 2 * C;
+
+ assign(B, 2);
+ assign(D, A + B * C);
+ A += where(D < 30, B, C);
+
+ assign(E, C);
+ E += E - 4 / (sin(C) + 1);
+
+ list<int>::const_iterator di = D.begin();
+ list<double>::const_iterator ei = E.begin();
+ for (i = 0; i < n; ++i)
+ {
+ cout << " A[" << i << "] = " << A[i]
+ << " B[" << i << "] = " << B[i]
+ << " C[" << i << "] = " << C[i]
+ << " D[" << i << "] = " << *di++
+ << " E[" << i << "] = " << *ei++
+ << endl;
+ }
+
+ return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in
b/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in
new file mode 100644
index 0000000..e4a3122
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in
@@ -0,0 +1,7 @@
+classes
+-----
+ ARG = "class T[n], class Allocator[n]"
+ CLASS = "vector<T[n], Allocator[n]>"
+-----
+ ARG = "class T[n], class Allocator[n]"
+ CLASS = "list<T[n], Allocator[n]>"
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h
b/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h
new file mode 100644
index 0000000..10c0712
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h
@@ -0,0 +1,5620 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Listing2Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const list<T1, Allocator1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2, Allocator2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T2, Allocator2> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const list<T2, Allocator2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T2, Allocator2> >::make(l)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const list<T2, Allocator2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1, Allocator1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const list<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1, Allocator1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& assign(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& assign(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator+=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator+=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator-=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator-=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator*=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator*=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator/=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator/=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator%=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator%=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator|=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator|=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator&=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator&=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator^=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator^=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator<<=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator<<=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator>>=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator>>=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing3.cpp
b/tools/pete-2.1.1/examples/DDJ/Listing3.cpp
new file mode 100644
index 0000000..db07ef5
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing3.cpp
@@ -0,0 +1,149 @@
+#include <iostream.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing1Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for the STL vector
+// so that operators know what to stick in the leaves of the expression tree.
+// We're going to use a different evaluation mechanism (operator[]()) so
+// store references to the vector operands at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+ typedef Reference<vector<T, Allocator> > Leaf_t;
+ inline static Leaf_t make(const vector<T, Allocator> &a) { return Leaf_t(a);
}
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate the leaves consisting of STL vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, EvalLeaf1>
+{
+ typedef T Type_t;
+ inline static
+ Type_t apply(const vector<T, Allocator>& vec, const EvalLeaf1 &f)
+ {
+ return vec[f.val1()];
+ }
+};
+
+//-----------------------------------------------------------------------------
+// We need to write a functor that is capable of comparing the size of
+// the vector with a stored value. Then, we supply LeafFunctor specializations
+// for Scalar<T> and STL vector leaves.
+//-----------------------------------------------------------------------------
+
+class SizeLeaf
+{
+public:
+
+ SizeLeaf(int s) : size_m(s) { }
+ SizeLeaf(const SizeLeaf &model) : size_m(model.size_m) { }
+ bool operator()(int s) const { return size_m == s; }
+
+private:
+
+ int size_m;
+
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, SizeLeaf>
+{
+ typedef bool Type_t;
+ inline static
+ bool apply(const Scalar<T> &, const SizeLeaf &)
+ {
+ // Scalars always conform.
+
+ return true;
+ }
+};
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, SizeLeaf>
+{
+ typedef bool Type_t;
+ inline static
+ bool apply(const vector<T, Allocator> &v, const SizeLeaf &s)
+ {
+ return s(v.size());
+ }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+ if (forEach(rhs, SizeLeaf(lhs.size()), AndCombine()))
+ {
+ // We get here if the vectors on the RHS are the same size as those on
+ // the LHS.
+
+ for (int i = 0; i < lhs.size(); ++i)
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. EvalLeaf1 gets the
+ // values at each node using random access, and the tag
+ // OpCombine tells forEach to use the operator tags in the
expression
+ // to combine values together.
+
+ op(lhs[i], forEach(rhs, EvalLeaf1(i), OpCombine()));
+ }
+ }
+ else
+ {
+ cerr << "Error: LHS and RHS don't conform." << endl;
+ exit(1);
+ }
+}
+
+int main()
+{
+ int i;
+ const int n = 10;
+ vector<double> A, C, E(n);
+ vector<int> B, D;
+
+ for (i = 0; i < n; ++i)
+ {
+ A.push_back(i);
+ B.push_back(2*i);
+ C.push_back(3*i);
+ D.push_back(i);
+ }
+
+ A += -B + 2 * C;
+
+ assign(B, 2);
+ assign(D, A + B * C);
+ A += where(D < 30, B, C);
+
+ assign(E, C);
+ E += E - 4 / (sin(C) + 1);
+
+ for (i = 0; i < n; ++i)
+ {
+ cout << " A[" << i << "] = " << A[i]
+ << " B[" << i << "] = " << B[i]
+ << " C[" << i << "] = " << C[i]
+ << " D[" << i << "] = " << D[i]
+ << " E[" << i << "] = " << E[i]
+ << endl;
+ }
+
+ return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing4.cpp
b/tools/pete-2.1.1/examples/DDJ/Listing4.cpp
new file mode 100644
index 0000000..4ff105e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing4.cpp
@@ -0,0 +1,187 @@
+#include <iostream.h>
+#include <list.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing2Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors and lists
+// so that operators know what to stick in the leaves of the expression tree.
+// In these cases, we store const_iterators at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+ typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+ inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin();
}
+};
+
+template<class T, class Allocator>
+struct CreateLeaf<list<T, Allocator> >
+{
+ typedef typename list<T, Allocator>::const_iterator Leaf_t;
+ inline static Leaf_t make(const list<T, Allocator> &a) { return a.begin(); }
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize LeafFunctor to extract iterator tags. By default,
+// it uses iterator_traits to extract the iterator tag. We also need to supply
+// a specialization for Scalar<T>, which simply returns
+// random_access_iterator_tag because scalars don't place any constraints on
+// iteration.
+//-----------------------------------------------------------------------------
+
+struct GetIteratorTagLeaf { };
+
+template<class Iterator>
+struct LeafFunctor<Iterator, GetIteratorTagLeaf>
+{
+ typedef std::iterator_traits<Iterator>::iterator_category Type_t;
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, GetIteratorTagLeaf>
+{
+ typedef std::random_access_iterator_tag Type_t;
+};
+
+#if defined(__MWERKS__)
+template<class T>
+struct LeafFunctor<const T *, GetIteratorTagLeaf>
+{
+ typedef std::random_access_iterator_tag Type_t;
+ inline static
+ Type_t apply(const T *, const GetIteratorTagLeaf &)
+ { return Type_t(); }
+};
+#endif
+
+//-----------------------------------------------------------------------------
+// We now need to define some combiners for synthesizing an iterator tag
+// from two others. The rule is that we return the tag with the fewest
+// capabilities. We're only dealing with vectors and lists, so we need to
+// consider only bidirectional and random access tags.
+//-----------------------------------------------------------------------------
+
+struct IteratorTagCombine { };
+
+template<class Op>
+struct Combine2<std::random_access_iterator_tag,
+ std::random_access_iterator_tag,
+ Op, IteratorTagCombine>
+{
+ typedef std::random_access_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::bidirectional_iterator_tag,
+ std::bidirectional_iterator_tag,
+ Op, IteratorTagCombine>
+{
+ typedef std::bidirectional_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::random_access_iterator_tag,
+ std::bidirectional_iterator_tag,
+ Op, IteratorTagCombine>
+{
+ typedef std::bidirectional_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::bidirectional_iterator_tag,
+ std::random_access_iterator_tag,
+ Op, IteratorTagCombine>
+{
+ typedef std::bidirectional_iterator_tag Type_t;
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate the leaves consisting of STL vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class Iterator>
+struct LeafFunctor<Iterator, EvalLeaf1>
+{
+ typedef typename std::iterator_traits<Iterator>::value_type Type_t;
+ inline static
+ Type_t apply(const Iterator &i, const EvalLeaf1 &f)
+ {
+ return *(i + f.val1());
+ }
+};
+
+#if defined(__MWERKS__)
+template<class T>
+struct LeafFunctor<const T *, EvalLeaf1>
+{
+ typedef T Type_t;
+ inline static
+ Type_t apply(const T *i, const EvalLeaf1 &f)
+ {
+ return *(i + f.val1());
+ }
+};
+#endif
+
+//-----------------------------------------------------------------------------
+// Return a particular element in the most efficient way possible. We extract
+// the most basic iterator tag from the expression and then dispatch (at
+// compile time) to a function that does the work.
+//-----------------------------------------------------------------------------
+
+template<class Expr>
+inline
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n)
+{
+ typedef typename
+ ForEach<Expression<Expr>, GetIteratorTagLeaf, IteratorTagCombine>::Type_t
+ IteratorTag_t;
+
+ return elem(expr, n, IteratorTag_t());
+}
+
+template<class Expr>
+inline
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n,
+ const std::random_access_iterator_tag &)
+{
+ return forEach(expr, EvalLeaf1(n), OpCombine());
+}
+
+template<class Expr>
+inline
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n,
+ const std::bidirectional_iterator_tag &)
+{
+ for (int i = 0; i < n; ++i)
+ forEach(expr, IncrementLeaf(), NullCombine());
+
+ return forEach(expr, DereferenceLeaf(), OpCombine());
+}
+
+int main()
+{
+ int n = 10;
+ vector<int> a, b, c;
+ list<double> d;
+
+ for (int i = 0; i < n;++i)
+ {
+ a.push_back(i);
+ b.push_back(2*i);
+ c.push_back(3*i);
+ d.push_back(4*i);
+ }
+
+ cout << elem(2.0 * a + b * c, 4) << endl;
+ cout << elem(2.5 * a + b * c + sin(d), 4) << endl;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Makefile.user
b/tools/pete-2.1.1/examples/DDJ/Makefile.user
new file mode 100644
index 0000000..eec7a57
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Makefile.user
@@ -0,0 +1,74 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG =
+
+default: Listing1 Listing2 Listing3 Listing4
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes Listing1Defs.in --assign-ops \
+ --o Listing1Operators.h
+ $(MAKEEXPR) --classes Listing2Defs.in --assign-ops \
+ --o Listing2Operators.h
+
+Listing1: Listing1.cpp Listing1Operators.h
+ $(CXX) -o Listing1 $(CXXINC) $(CXXARG) Listing1.cpp -lm
+
+Listing2: Listing2.cpp Listing2Operators.h
+ $(CXX) -o Listing2 $(CXXINC) $(CXXARG) Listing2.cpp -lm
+
+Listing3: Listing3.cpp Listing1Operators.h
+ $(CXX) -o Listing3 $(CXXINC) $(CXXARG) Listing3.cpp -lm
+
+Listing4: Listing4.cpp Listing2Operators.h
+ $(CXX) -o Listing4 $(CXXINC) $(CXXARG) Listing4.cpp -lm
+
+clean:
+ rm -rf Listing1 Listing2 Listing3 Listing4 ti_files ii_files
+
+run: Listing1 Listing2 Listing3 Listing4
+ Listing1
+ Listing2
+ Listing3
+ Listing4
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: Makefile.user,v $ $Author: swhaney $
+# $Revision: 1.5 $ $Date: 2000/01/04 01:39:58 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/DDJ/README
b/tools/pete-2.1.1/examples/DDJ/README
new file mode 100644
index 0000000..bae98c7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/README
@@ -0,0 +1,38 @@
+/*******************************************************************
+ * *
+ * Doctor Dobb's Journal Article Examples *
+ * *
+ *******************************************************************/
+
+The codes in this directory are the example codes used in the
+PETE article submitted to Doctor Dobb's Journal.
+(See html/ddj_article.html).
+
+Listing1.cpp illustrates how trivial it is to add expression-template
+capabilities to the STL vector class. Iterators are stored in the
+expression tree leaves.
+
+Listing2.cpp extends the first example to evaluate expressions
+involving STL vectors and STL lists. (It uses iterators as well.)
+
+Listing3.cpp extends the vector example to check that they conform
+(are all the same size) before evaluating the expression. Since
+we want to extract the vector sizes, we store references to the
+vectors in the expression tree leaves.
+
+Listing4.cpp illustrates the compile-time computation of a trait
+associated with an expression. The code generates expression
+templates for vectors and lists that store iterators at the leaves.
+A traits class is created that combines the iterator_category
+traits of all the iterators in an expression to see if they are all
+random access or if some are just bidirectional. This trait is used
+at compile time to select the evaluation mechanism for a particular
+element. If all the iterators are random access, then we apply a
+functor that contains an offset, otherwise we increment all the
+iterators to the desired location and then dereference them.
+
+Listing1Operators.h is generated from Listing1Defs.in and just
+contains the operators for STL vectors (used by Listin1.cpp and
+Listing3.cpp). Listing2Operators is generated from Listing2Defs.in
+and contains operators for STL vectors and STL lists (used by
+Listing2.cpp and Listing4.cpp).
\ No newline at end of file
diff --git a/tools/pete-2.1.1/examples/DDJ/makefile
b/tools/pete-2.1.1/examples/DDJ/makefile
new file mode 100644
index 0000000..8008db6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/makefile
@@ -0,0 +1,74 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Listing1 Listing2 Listing3 Listing4
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes Listing1Defs.in --assign-ops \
+ > Listing1Operators.h
+ $(MAKEEXPR) --classes Listing2Defs.in --assign-ops \
+ > Listing2Operators.h
+
+Listing1: Listing1.cpp Listing1Operators.h
+ $(CXX) -o Listing1 $(CXXINC) $(CXXOPTARG) Listing1.cpp -lm
+
+Listing2: Listing2.cpp Listing2Operators.h
+ $(CXX) -o Listing2 $(CXXINC) $(CXXOPTARG) Listing2.cpp -lm
+
+Listing3: Listing3.cpp Listing1Operators.h
+ $(CXX) -o Listing3 $(CXXINC) $(CXXOPTARG) Listing3.cpp -lm
+
+Listing4: Listing4.cpp Listing2Operators.h
+ $(CXX) -o Listing4 $(CXXINC) $(CXXOPTARG) Listing4.cpp -lm
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -f Listing1 Listing2 Listing3 Listing4
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Listing1 Listing2 Listing3 Listing4
+ Listing1
+ Listing2
+ Listing3
+ Listing4
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.8 $ $Date: 2000/01/04 01:39:58 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Eval.h
b/tools/pete-2.1.1/examples/Mixed/Eval.h
new file mode 100644
index 0000000..d3defcb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Eval.h
@@ -0,0 +1,140 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#ifndef PETE_EXAMPLES_MIXED_EVAL_H
+#define PETE_EXAMPLES_MIXED_EVAL_H
+
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+
+#include "MixedOperators.h"
+
+//-----------------------------------------------------------------------------
+// Eval.h
+//
+// This file contains several class definitions that are use to evaluate
+// expressions containing STL vectors. The main function defined at the end
+// is evaluate(lhs,op,rhs), which allows the syntax:
+// vector<int> a,b,c;
+// evaluate(a,OpAssign(),b+c);
+//
+// evaluate() is called by all the global assignment operator functions
+// defined in MixedOperators.h
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our classes, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class T>
+struct CreateLeaf<vector<T> >
+{
+ typedef vector<T>::const_iterator Leaf_t;
+ inline static
+ Leaf_t make(const vector<T> &a) { return a.begin(); }
+};
+
+template<class T>
+struct CreateLeaf<list<T> >
+{
+ typedef list<T>::const_iterator Leaf_t;
+ inline static
+ Leaf_t make(const list<T> &a) { return a.begin(); }
+};
+
+
+//-----------------------------------------------------------------------------
+// evaluate(lhs,op,rhs) (vector on LHS)
+//
+// Loop over size and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T,class Op,class RHS>
+inline
+void evaluate(vector<T> &lhs,const Op &op,const RHS &rhs)
+{
+ for (int i = 0; i < lhs.size(); ++i)
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. DereferenceLeaf gets the
+ // values at each node by deferencing an iterator, and the tag
+ // OpCombine tells forEach to use the operator tags in the expression
+ // to combine values together.
+
+ op(lhs[i], forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+ // Now, we have to increment the iterators for everything on the RHS.
+ // The results don't need to be combined so we use a NullCombiner.
+
+ forEach(rhs, IncrementLeaf(), NullCombine());
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// evaluate(lhs,op,rhs) (list on LHS)
+//
+// Loop over size and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T,class Op,class RHS>
+inline
+void evaluate(list<T> &lhs,const Op &op,const RHS &rhs)
+{
+ typename list<T>::iterator i = lhs.begin();
+ while (i != lhs.end())
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment operation.)
+ // forEach is used to compute the rhs value. DereferenceLeaf gets the
+ // values at each node, and the tag OpCombine tells forEach to use the
+ // operator tags in the expression to combine values together.
+
+ op(*i++, forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+ // Now, we have to increment the iterators for everything on the RHS.
+
+ forEach(rhs, IncrementLeaf(), NullCombine());
+ }
+}
+
+#endif // PETE_EXAMPLES_MIXED_EVAL_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Eval.h,v $ $Author: swhaney $
+// $Revision: 1.5 $ $Date: 2000/01/04 01:40:07 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Makefile.user
b/tools/pete-2.1.1/examples/Mixed/Makefile.user
new file mode 100644
index 0000000..356c131
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Makefile.user
@@ -0,0 +1,61 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG =
+
+default: Mixed
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes MixedDefs.in --assign-ops --o MixedOperators.h
+
+Mixed: Mixed.cpp Eval.h MixedOperators.h
+ $(CXX) -o Mixed $(CXXINC) $(CXXARG) Mixed.cpp -lm
+
+clean:
+ rm -f Mixed
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Mixed
+ Mixed
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: Makefile.user,v $ $Author: swhaney $
+# $Revision: 1.5 $ $Date: 2000/01/04 01:40:08 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Mixed.cpp
b/tools/pete-2.1.1/examples/Mixed/Mixed.cpp
new file mode 100644
index 0000000..4514ecd
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Mixed.cpp
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include <complex.h>
+#include <list.h>
+#include <vector.h>
+
+#include "PETE/PETE.h"
+#include "Eval.h"
+
+// The current release of PETE does not provide type computation
+// support for complex, because that would require importing the definition
+// of complex into codes that don't use it. Support for complex is easy to
+// add, just see the file TypeComputations.h to see how to support it in
+// general. The following struct just supports the one case used in this
+// code.
+
+template<>
+struct Promote<double, complex<double> >
+{
+ typedef complex<double> Type_t;
+};
+
+int main()
+{
+ int n = 10;
+ vector<int> a,b,c,d;
+ list<double> e;
+ list<complex<double> > f;
+
+ int i;
+ for(i = 0;i < n; ++i)
+ {
+ a.push_back(i);
+ b.push_back(2*i);
+ c.push_back(3*i);
+ d.push_back(i);
+ e.push_back(0.0);
+ f.push_back(complex<double>(1.0, 1.0));
+ }
+
+ assign(b, 2);
+ assign(d, a + b * c);
+ a += where(d < 30, b, c);
+
+ assign(e, c);
+ e += e - 4 / (c + 1);
+
+ f -= sin(0.1 * e * complex<double>(0.2, 1.2));
+
+ list<double>::const_iterator ei = e.begin();
+ list<complex<double> >::const_iterator fi = f.begin();
+ for (i = 0; i < n; ++i)
+ {
+ cout << "a(" << i << ") = " << a[i]
+ << " b(" << i << ") = " << b[i]
+ << " c(" << i << ") = " << c[i]
+ << " d(" << i << ") = " << d[i]
+ << " e(" << i << ") = " << *ei++
+ << " f(" << i << ") = " << *fi++
+ << endl;
+ }
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Mixed.cpp,v $ $Author: sa_smith $
+// $Revision: 1.5 $ $Date: 2000/08/03 00:11:03 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/MixedDefs.in
b/tools/pete-2.1.1/examples/Mixed/MixedDefs.in
new file mode 100644
index 0000000..0d2127e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/MixedDefs.in
@@ -0,0 +1,8 @@
+classes
+-----
+ ARG = "class T[n]"
+ CLASS = "vector<T[n]>"
+-----
+ ARG = "class T[n]"
+ CLASS = "list<T[n]>"
+
diff --git a/tools/pete-2.1.1/examples/Mixed/MixedOperators.h
b/tools/pete-2.1.1/examples/Mixed/MixedOperators.h
new file mode 100644
index 0000000..419d1d6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/MixedOperators.h
@@ -0,0 +1,5620 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// MixedDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+acos(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+acos(const list<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+asin(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+asin(const list<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+atan(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+atan(const list<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+ceil(const list<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cos(const vector<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+cos(const list<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+cosh(const list<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+exp(const vector<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+exp(const list<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+fabs(const list<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+floor(const vector<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+floor(const list<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log(const vector<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+log(const list<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log10(const vector<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+log10(const list<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sin(const vector<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sin(const list<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sinh(const list<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sqrt(const list<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tan(const vector<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+tan(const list<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+tanh(const list<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator~(const list<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const list<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator!(const list<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const list<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const list<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<list<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const list<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<list<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<list<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+template<class T1,class RHS>
+inline
+vector<T1>& assign(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& assign(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator+=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator+=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator-=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator-=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator*=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator*=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator/=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator/=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator%=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator%=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator|=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator|=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator&=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator&=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator^=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator^=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator<<=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator<<=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator>>=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator>>=(list<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/Mixed/README
b/tools/pete-2.1.1/examples/Mixed/README
new file mode 100644
index 0000000..429a582
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/README
@@ -0,0 +1,9 @@
+/*******************************************************************
+ * *
+ * Mixed example *
+ * *
+ *******************************************************************/
+
+This example illustrates mixing STL vectors and lists in expressions.
+For another example of this combination, see Listing2.cpp and
+Listing4.cpp in examples/DDJ.
diff --git a/tools/pete-2.1.1/examples/Mixed/makefile
b/tools/pete-2.1.1/examples/Mixed/makefile
new file mode 100644
index 0000000..2edc27c
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Mixed
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes MixedDefs.in --assign-ops \
+ > MixedOperators.h
+
+Mixed: Mixed.cpp Eval.h MixedOperators.h
+ $(CXX) -o Mixed $(CXXINC) $(CXXOPTARG) Mixed.cpp -lm
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -f Mixed
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Mixed
+ Mixed
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.7 $ $Date: 2000/01/04 01:40:08 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/README
b/tools/pete-2.1.1/examples/RGB/README
new file mode 100644
index 0000000..aa1599a
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/README
@@ -0,0 +1,17 @@
+/*******************************************************************
+ * *
+ * RGB example *
+ * *
+ *******************************************************************/
+
+This example illustrates compile-time synthesis of types using PETE.
+See the tutorial in html/tut-3.html for a description of this example.
+
+Mathemetical operations between three `colors' (Operand<Blue>,
+Operand<Red> and Operand<Green>) are implemented. Functors are defined
+that extract the types of the leaves. The PETE class Combine2
+is specialized in RGB.h to tell PETE how to combine the types in
+an expression.
+
+Type computations of this sort are often used to select particular
+algorithms based on the types of the objects appearing in an expression.
diff --git a/tools/pete-2.1.1/examples/RGB/RGB.cpp
b/tools/pete-2.1.1/examples/RGB/RGB.cpp
new file mode 100644
index 0000000..92bf7fd
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGB.cpp
@@ -0,0 +1,43 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "RGB.h"
+
+int main()
+{
+ printColor(Operand<Red>() + Operand<Green>());
+ printColor(Operand<Red>() + Operand<Green>() + Operand<Blue>());
+ printColor(Operand<Red>() + (Operand<Green>() + Operand<Blue>()));
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: RGB.cpp,v $ $Author: swhaney $
+// $Revision: 1.4 $ $Date: 2000/01/04 01:40:14 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/RGB.h
b/tools/pete-2.1.1/examples/RGB/RGB.h
new file mode 100644
index 0000000..81bf126
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGB.h
@@ -0,0 +1,180 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//=============================================================================
+// This example shows how to use combiners to synthesize a type at compile
+// time using ForEach.
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_RGB_RGB_H
+#define PETE_EXAMPLES_RGB_RGB_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+
+#include "PETE/PETE.h"
+
+//-----------------------------------------------------------------------------
+// Tag classes representing colors. Also, a functor for getting a color from
+// a leaf and a combiner for combining colors.
+//-----------------------------------------------------------------------------
+
+struct Red { };
+struct Green { };
+struct Blue { };
+struct GetColor { };
+struct ColorCombine { };
+
+//-----------------------------------------------------------------------------
+// A few overloaded functions that print out color names given a type.
+//-----------------------------------------------------------------------------
+
+inline void calc(const Red &)
+{
+ cout << "This expression is red." << endl;
+}
+
+inline void calc(const Blue &)
+{
+ cout << "This expression is blue." << endl;
+}
+
+inline void calc(const Green &)
+{
+ cout << "This expression is green." << endl;
+}
+
+//-----------------------------------------------------------------------------
+// A function that deduces a color at compile time and calls a special
+// function based on the value.
+//
+//-----------------------------------------------------------------------------
+
+template <class Expr>
+void printColor(const Expression<Expr> &expr)
+{
+ typedef typename ForEach<Expression<Expr>, GetColor, ColorCombine>::Type_t
+ DeducedColor_t;
+
+ calc(DeducedColor_t());
+}
+
+//-----------------------------------------------------------------------------
+// A set of combiners that produce new colors according to some arbitrary
+// rules: red & green give blue, red & blue give green, blue and green give
+// red.
+//-----------------------------------------------------------------------------
+
+template<class Op>
+struct Combine2<Red, Green, Op, ColorCombine>
+{
+ typedef Blue Type_t;
+};
+
+template<class Op>
+struct Combine2<Red, Blue, Op, ColorCombine>
+{
+ typedef Green Type_t;
+};
+
+template<class Op>
+struct Combine2<Green, Blue, Op, ColorCombine>
+{
+ typedef Red Type_t;
+};
+
+template<class Op>
+struct Combine2<Green, Red, Op, ColorCombine>
+{
+ typedef Blue Type_t;
+};
+
+template<class Op>
+struct Combine2<Blue, Green, Op, ColorCombine>
+{
+ typedef Red Type_t;
+};
+
+template<class Op>
+struct Combine2<Blue, Red, Op, ColorCombine>
+{
+ typedef Green Type_t;
+};
+
+template<class C1, class C2, class Op>
+struct Combine2<C1, C2, Op, ColorCombine>
+{
+ typedef C1 Type_t;
+};
+
+//-----------------------------------------------------------------------------
+// A class that has a single template parameter that specifies a color.
+//-----------------------------------------------------------------------------
+
+template<class ColorTag>
+class Operand
+{
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for Operand, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class ColorTag>
+struct CreateLeaf<Operand<ColorTag> >
+{
+ typedef Operand<ColorTag> Leaf_t;
+ inline static
+ const Leaf_t &make(const Operand<ColorTag> &a) { return a; }
+};
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the getting the "color"
+// of an operand.
+//-----------------------------------------------------------------------------
+
+template<class Color>
+struct LeafFunctor<Operand<Color>, GetColor>
+{
+ typedef Color Type_t;
+};
+
+#include "RGBOperators.h"
+
+#endif // PETE_EXAMPLES_RGB_RGB_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: RGB.h,v $ $Author: swhaney $
+// $Revision: 1.8 $ $Date: 2000/01/04 01:40:15 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/RGBDefs.in
b/tools/pete-2.1.1/examples/RGB/RGBDefs.in
new file mode 100644
index 0000000..205a67c
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGBDefs.in
@@ -0,0 +1,5 @@
+classes
+-----
+ ARG = "class T[n]"
+ CLASS = "Operand<T[n]>"
+
diff --git a/tools/pete-2.1.1/examples/RGB/RGBOperators.h
b/tools/pete-2.1.1/examples/RGB/RGBOperators.h
new file mode 100644
index 0000000..26270d9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGBOperators.h
@@ -0,0 +1,3007 @@
+#ifndef RGBOPS_H
+#define RGBOPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// RGBDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+acos(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+asin(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+atan(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+ceil(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+cos(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+cosh(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+exp(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+fabs(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+floor(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+log(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+log10(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sin(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sinh(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sqrt(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+tan(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+tanh(const Operand<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator~(const Operand<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Operand<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator!(const Operand<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Operand<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Operand<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Operand<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Operand<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Operand<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Operand<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+#endif // RGBOPS_H
+
diff --git a/tools/pete-2.1.1/examples/RGB/makefile
b/tools/pete-2.1.1/examples/RGB/makefile
new file mode 100644
index 0000000..29124ab
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: RGB
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes RGBDefs.in \
+ --guard RGBOPS_H > RGBOperators.h
+
+RGB: RGB.cpp RGB.h RGBOperators.h
+ $(CXX) -o RGB $(CXXINC) $(CXXOPTARG) RGB.cpp
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -f RGB
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: RGB
+ RGB
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.5 $ $Date: 2000/01/04 01:40:15 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h
b/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h
new file mode 100644
index 0000000..3630fa9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h
@@ -0,0 +1,274 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//-----------------------------------------------------------------------------
+// Classes:
+// ForEachInOrder
+// TagVisitor
+//-----------------------------------------------------------------------------
+
+#ifndef POOMA_PETE_FOREACHINORDER_H
+#define POOMA_PETE_FOREACHINORDER_H
+
+//-----------------------------------------------------------------------------
+// Overview:
+//
+// ForEachInOrder is like ForEach except that it traverses the parse
+// tree "in order", meaning it visits the parts of a TBTree as follows:
+//
+// visit left child
+// visit value
+// visit right child
+//
+// In addition, it calls a start() function on the visit tag before
+// visit(left) and a finish() function after visit(right). This
+// additional bit of generality allows special actions to be taken,
+// in essence, when the ForEachInOrder::apply moves down and back up
+// the edges of the parse tree (such as printing parentheses).
+//
+// An "in order" traversal is not what one does for evaluating
+// expressions, so this may not be useful for much, but I wanted to
+// do it to gain some more experience with PETE.
+//
+// This first cut will only do TBTrees.
+//
+// The TagFunctor and TagCombine structs from ForEach.h can be reused.
+//
+// TagVisitor is a new class that visits the "value" node prior,
+// between, and after the left and right children are visited.
+//
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedefs:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Includes:
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+
+//-----------------------------------------------------------------------------
+// Forward Declarations:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+//
+// Full Description:
+//
+// The ForEachInOrder struct implements a template meta-program
+// traversal of a PETE Expression parse-tree. As explained above, this
+// is done "in order" rather than the "post order" traversal done by
+// ForEach.
+//
+// The ForEachInOrder struct defines:
+//
+// typename ForEachInOrder<Expr,FTag,VTag,CTag>::Type_t
+//
+// Type_t::apply(Expr& expr, FTag f, VTag v, CTag c) {...};
+//
+// where
+//
+// Expr is the type of an expression tree.
+// FTag is the type of a functor tag.
+// VTag is the type of a visitor tag.
+// CTag is the type of a combiner tag.
+//
+// Details:
+//
+// Type_t::apply(Expr &e, FTag f, VTag v, CTag c)
+//
+// function that traverses the expression tree defined by e, and for
+// each binary-tree node it does:
+//
+// TagVisitor<...>::start(e.value_m,v);
+//
+// left_val = ForEachInOrder<...>::apply(e.left_m,f,v,c),
+//
+// TagVisitor<...>::visit(e.value_m,v);
+//
+// right_val = ForEachInOrder<...>::apply(e.right_m,f,v,c),
+//
+// retval = TagCombineInOrdere<...>::
+// apply(left_val, right_val, e.value_m, c)
+//
+// TagVisitor<...>::finish(e.value_m,v);
+//
+// return retval;
+//
+// The TagFunctor is specialized to perform a specific action at the
+// leaf nodes.
+//
+// The TagVisitor is specialized to perform specific actions both at
+// the start and finish of a new TBTree node, and to perform a
+// specific operation when it visits the "value" node of the parse
+// tree (i.e. this can be specialized to perform specific operations
+// for every type of operator). Note that the value returned by
+// TagVisitor::apply must be of the type Op. This usually means
+// that TagVisitor::apply will just return e.value_m after it does
+// its calculation.
+//
+// The TagCombiner is specialized to combine the results of visiting
+// the left, right, and value fields.
+//
+// The type of object returned is given by:
+//
+// typename ForEachInOrder<Expr,FTag,VTag,CTag>::Type_t
+//
+//-----------------------------------------------------------------------------
+
+//
+// struct TagVisitor
+//
+// "Visitor" functor whose apply() method is applied to the value_m
+// field of an expression between the left-traversal and the
+// right-traversal.
+//
+// Default is "null" behavior. Just return the op. This should make
+// this equivalent to ForEach. This should probably always return the
+// unless it is ignored by everything else. But it can take other
+// actions as well.
+//
+// Also includes start() and finish() functions that are called when
+// the traversal moves down and back up an edge, respectively.
+//
+
+template <class Op, class VTag>
+struct TagVisitor
+{
+ static void start(Op, VTag) { }
+ static void visit(Op, VTag) { }
+ static void finish(Op, VTag) { }
+};
+
+
+//
+// struct ForEachInOrder
+//
+// Template meta-program for traversing the parse tree.
+//
+// Default behaviour assumes you're at a leaf, in which case
+// it just applies the FTag functor
+//
+
+template<class Expr, class FTag, class VTag, class CTag>
+struct ForEachInOrder
+{
+ typedef LeafFunctor<Expr,FTag> Tag_t;
+ typedef typename Tag_t::Type_t Type_t;
+
+ static Type_t apply(const Expr &expr, const FTag &f, const VTag &v,
+ const CTag &c)
+ {
+ return Tag_t::apply(expr,f);
+ }
+};
+
+//
+// The Refernce case needs to apply the functor to the wrapped object.
+//
+
+template<class T, class FTag, class VTag, class CTag>
+struct ForEachInOrder<Reference<T>,FTag,VTag,CTag>
+{
+ typedef LeafFunctor<T,FTag> Tag_t;
+ typedef typename Tag_t::Type_t Type_t;
+
+ static Type_t apply(const Reference<T> &expr, const FTag &f,
+ const VTag &v, const CTag &c)
+ {
+ return Tag_t::apply(expr.reference(),f);
+ }
+};
+
+//
+// struct ForEachInOrder
+//
+// Specialization for a TBTree. This just performs the recursive
+// traversal described above.
+//
+
+template<class Op, class A, class B, class FTag, class VTag,
+ class CTag>
+struct ForEachInOrder<BinaryNode<Op, A, B>, FTag, VTag, CTag>
+{
+ typedef ForEachInOrder<A, FTag, VTag, CTag> ForEachLeft_t;
+ typedef ForEachInOrder<B, FTag, VTag, CTag> ForEachRight_t;
+ typedef TagVisitor<Op, VTag> Visitor_t;
+
+ typedef typename ForEachLeft_t::Type_t TypeL_t;
+ typedef typename ForEachRight_t::Type_t TypeR_t;
+
+ typedef Combine2<TypeL_t, TypeR_t, Op, CTag> Combiner_t;
+
+ typedef typename Combiner_t::Type_t Type_t;
+
+ static Type_t apply(const BinaryNode<Op, A, B> &expr, const FTag &f,
+ const VTag &v, const CTag &c)
+ {
+ Visitor_t::start(expr.operation(),v);
+
+ TypeL_t left_val = ForEachLeft_t::apply(expr.left(), f, v, c);
+
+ Visitor_t::visit(expr.operation(),v);
+
+ TypeR_t right_val = ForEachRight_t::apply(expr.right(), f, v, c);
+
+ Type_t val = Combiner_t::combine(left_val, right_val, expr.operation(), c);
+
+ Visitor_t::finish(expr.operation(),v);
+
+ return val;
+ }
+};
+
+
+//
+// Specializations of Combine2 for NullTag()
+// (seems like something like this should be in ForEach.h)
+//
+
+struct NullTag {};
+
+template<class A,class B,class Op>
+struct Combine2<A, B, Op, NullTag>
+{
+ typedef int Type_t;
+ static Type_t combine(A, B, Op, NullTag)
+ { return 0; }
+};
+
+#endif // PETE_PETE_FOREACHINORDER_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: ForEachInOrder.h,v $ $Author: swhaney $
+// $Revision: 1.6 $ $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/README
b/tools/pete-2.1.1/examples/TArray/README
new file mode 100644
index 0000000..4f1174a
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/README
@@ -0,0 +1,19 @@
+/*******************************************************************
+ * *
+ * TArray example *
+ * *
+ *******************************************************************/
+
+This somewhat complicated example demonstrates some of the inner
+workings of PETE, by printing an expression in the order that it
+appears in the source code.
+
+PETE evaluates expressions by evaluating the leaves, and then
+combining the results. If you were to print out the leaf values
+in LeafFunctor, and the operators during the combine operation,
+then an expression like a+b*c would get printed in postfix notation:
+a, b, c, *, +. To print elements in order, this example defines
+a ForEachInOrder struct that generalizes PETE's ForEach.
+ForEachInOrder allows for extra operations to be performed
+between evaluation of the sub-trees and before and after.
+(See the file ForEachInOrder.h.)
diff --git a/tools/pete-2.1.1/examples/TArray/TArray.cpp
b/tools/pete-2.1.1/examples/TArray/TArray.cpp
new file mode 100644
index 0000000..26e6898
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArray.cpp
@@ -0,0 +1,64 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "TArray.h"
+
+int main()
+{
+ TArray a(3,1,2);
+
+ TArray b;
+
+ cout << a << endl;
+ cout << b << endl;
+
+ b[0] = 7; b[1] = 33; b[2] = -99;
+
+ TArray c(a);
+
+ cout << c << endl;
+
+ a = 0;
+
+ cout << a << endl;
+ cout << b << endl;
+ cout << c << endl;
+
+ a = b + c;
+
+ cout << a << endl;
+
+ a.printAssign(b+c*(b + 3*c));
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: TArray.cpp,v $ $Author: swhaney $
+// $Revision: 1.3 $ $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/TArray.h
b/tools/pete-2.1.1/examples/TArray/TArray.h
new file mode 100644
index 0000000..210b53b
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArray.h
@@ -0,0 +1,394 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//=============================================================================
+// TArray.h
+//-----------------------------------------------------------------------------
+// DESCRIPTION:
+//
+// This example serves two purposes. First, it demonstrates the
+// construction of an expression-template-aware array. Second, it
+// demonstrates the flexibility of the ForEach type of template-metaprogram.
+//
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_TARRAY_TARRAY_H
+#define PETE_EXAMPLES_TARRAY_TARRAY_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+#include "ForEachInOrder.h"
+
+#include <iostream.h>
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+
+struct PrintTag;
+
+//-----------------------------------------------------------------------------
+//
+// CLASS NAME
+// TArray
+//
+// DESCRIPTION
+// A "tiny" three-element expression-template (ET) array class.
+//
+//-----------------------------------------------------------------------------
+
+class TArray
+{
+public:
+
+ //---------------------------------------------------------------------------
+ // Constructors and Destructor
+ //---------------------------------------------------------------------------
+
+ TArray()
+ {
+ data[0] = data[1] = data[2] = 0;
+ }
+
+ TArray(int i, int j, int k)
+ {
+ data[0] = i; data[1] = j; data[2] = k;
+ }
+
+ TArray(const TArray &model)
+ {
+ data[0] = model.data[0];
+ data[1] = model.data[1];
+ data[2] = model.data[2];
+ }
+
+ ~TArray() {}
+
+
+ //---------------------------------------------------------------------------
+ // TArray and scalar assigment operators
+ //---------------------------------------------------------------------------
+
+ TArray &operator=(const TArray &rhs)
+ {
+ data[0] = rhs.data[0];
+ data[1] = rhs.data[1];
+ data[2] = rhs.data[2];
+
+ return *this;
+ }
+
+ TArray &operator=(int i)
+ {
+ data[0] = data[1] = data[2] = i;
+ return *this;
+ }
+
+ //---------------------------------------------------------------------------
+ // Indexing operators
+ //---------------------------------------------------------------------------
+
+ int &operator[](int i)
+ { return data[i]; }
+
+ int operator[](int i) const
+ { return data[i]; }
+
+ //---------------------------------------------------------------------------
+ // Print method used by operator<< free function.
+ //---------------------------------------------------------------------------
+
+ void print(ostream &os) const
+ {
+ os << "{" << data[0] << ", "
+ << data[1] << ", "
+ << data[2] << "}";
+ }
+
+ //===========================================================================
+ // PETE Requirements
+ //===========================================================================
+
+ // Assignment operator taking expression:
+
+ template <class Expr>
+ TArray &operator=(const Expr &expr)
+ {
+ typedef EvalLeaf1 FTag_t;
+ typedef OpCombine CTag_t;
+ typedef NullCombine VTag_t;
+
+ typedef CreateLeaf<Expr>::Leaf_t Expr_t;
+
+ typedef ForEachInOrder<Expr_t, FTag_t, VTag_t, CTag_t> ForEach_t;
+
+ const Expr_t &e = CreateLeaf<Expr>::make(expr);
+
+ data[0] = ForEach_t::apply(e, FTag_t(0), VTag_t(), CTag_t());
+ data[1] = ForEach_t::apply(e, FTag_t(1), VTag_t(), CTag_t());
+ data[2] = ForEach_t::apply(e, FTag_t(2), VTag_t(), CTag_t());
+
+ return *this;
+ }
+
+ // printAssign method performs an assignment and the traverses the
+ // parse-tree and prints the expression to cout.
+
+ template <class Expr>
+ void printAssign(const Expr &expr)
+ {
+ typedef EvalLeaf1 FTag_t;
+ typedef OpCombine CTag_t;
+ typedef NullCombine VTag_t;
+
+ typedef CreateLeaf<Expr>::Leaf_t Expr_t;
+
+ typedef ForEachInOrder<Expr_t, FTag_t, VTag_t, CTag_t> ForEach_t;
+
+ const Expr_t &e = CreateLeaf<Expr>::make(expr);
+
+ data[0] = ForEach_t::apply(e, FTag_t(0), VTag_t(), CTag_t());
+ data[1] = ForEach_t::apply(e, FTag_t(1), VTag_t(), CTag_t());
+ data[2] = ForEach_t::apply(e, FTag_t(2), VTag_t(), CTag_t());
+
+ typedef BinaryNode<OpAssign, TArray, Expr_t> Assign_t;
+
+ typedef ForEachInOrder<Assign_t, PrintTag, PrintTag, NullTag> Print_t;
+
+ OpAssign opAssign;
+ Assign_t t(opAssign, *this, e);
+
+ Print_t::apply(t, PrintTag(cout), PrintTag(cout), NullTag());
+
+ cout << endl;
+
+ }
+
+private:
+
+ // The underlying complicated data structure
+
+ int data[3];
+
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+// TArray's are containers so we want to store these by reference in the
+// expression tree.
+//-----------------------------------------------------------------------------
+
+template<>
+struct CreateLeaf<TArray>
+{
+ typedef Reference<TArray> Leaf_t;
+ inline static
+ Leaf_t make(const TArray &a) { return a; }
+};
+
+//-----------------------------------------------------------------------------
+// ostream inserter for TArrays
+//-----------------------------------------------------------------------------
+
+ostream &operator<<(ostream &os, const TArray &a)
+{
+ a.print(os);
+ return os;
+}
+
+//=============================================================================
+// Functor definitions required for evaluation loop
+//=============================================================================
+
+//
+// struct LeafFunctor<TArray, EvalLeaf1
+//
+// Specialication of LeafFunctor class for applying the EvalLeaf1
+// tag to a TArray. The apply method simply returns the array
+// evaluated at the point.
+//
+
+template<>
+struct LeafFunctor<TArray, EvalLeaf1>
+{
+ typedef int Type_t;
+ static Type_t apply(const TArray &a, const EvalLeaf1 &f)
+ { return a[f.i1_m]; }
+};
+
+
+//=============================================================================
+// Functor definitions required for "print" loop
+//=============================================================================
+
+//
+// struct PrintTag
+//
+// Tag struct to carry an ostream ref through the parse tree.
+//
+
+struct PrintTag
+{
+ mutable ostream &os_m;
+ PrintTag(ostream &os) : os_m(os) {}
+};
+
+
+//
+// struct LeafFunctor<TArray, PrintTag>
+//
+// Specialization of LeafFunctor class for applying the PrintTag tag to
+// a TArray. The apply method simply prints the result to the ostream
+// carried by PrintTag.
+//
+
+template<>
+struct LeafFunctor<TArray, PrintTag>
+{
+ typedef int Type_t;
+ static int apply(const TArray &a, const PrintTag &f)
+ {
+ f.os_m << a;
+ return 0;
+ }
+};
+
+//
+// struct LeafFunctor<Scalar<T>, PrintTag>
+//
+// Specialication of TagFunctor class for applying the PrintTag tag to
+// a Scalar<T>. The apply method simply prints the result to the
+// ostream carried by PrintTag.
+//
+
+template<class T>
+struct LeafFunctor<Scalar<T>, PrintTag>
+{
+ typedef int Type_t;
+ static int apply(const Scalar<T> &s, const PrintTag &f)
+ {
+ f.os_m << s.value();
+ return 0;
+ }
+};
+
+
+//
+// struct ParenPrinter
+//
+// Utility class to provide start and finish functions that print the
+// open paren and closed paren for an expression as the ForEach moves
+// down and back up an edge of the parse-tree.
+//
+
+template<class Op>
+struct ParenPrinter
+{
+ static void start(Op,PrintTag) {};
+
+ static void finish(Op,PrintTag) {};
+};
+
+
+// Only need to parenthesize assignment
+
+template<>
+struct ParenPrinter<OpAdd>
+{
+ static void start(OpAdd,PrintTag p)
+ { p.os_m << "("; }
+
+ static void finish(OpAdd,PrintTag p)
+ { p.os_m << ")"; }
+};
+
+//
+// struct TagVisitor<OpAdd, PrintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpAdd nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpAdd, PrintTag> : public ParenPrinter<OpAdd>
+{
+ static void visit(OpAdd op, PrintTag t)
+ {
+ t.os_m << " + ";
+ }
+};
+
+//
+// struct TagVisitor<OpMultiply, rintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpMultiply nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpMultiply, PrintTag> : public ParenPrinter<OpMultiply>
+{
+ static void visit(OpMultiply op, PrintTag t)
+ {
+ t.os_m << " * ";
+ }
+};
+
+//
+// struct TagVisitor<OpAssign, PrintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpAssign nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpAssign, PrintTag> : public ParenPrinter<OpAssign>
+{
+ static void visit(OpAssign op, PrintTag t)
+ {
+ t.os_m << " = ";
+ }
+};
+
+#include "TArrayOperators.h"
+
+#endif // PETE_EXAMPLES_TARRAY_TARRAY_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: TArray.h,v $ $Author: swhaney $
+// $Revision: 1.12 $ $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/TArrayDefs.in
b/tools/pete-2.1.1/examples/TArray/TArrayDefs.in
new file mode 100644
index 0000000..c3a43b6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArrayDefs.in
@@ -0,0 +1,4 @@
+classes
+-----
+ ARG = ""
+ CLASS = "TArray"
diff --git a/tools/pete-2.1.1/examples/TArray/TArrayOperators.h
b/tools/pete-2.1.1/examples/TArray/TArrayOperators.h
new file mode 100644
index 0000000..3a2431d
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArrayOperators.h
@@ -0,0 +1,2964 @@
+#ifndef TARRAYOPS_H
+#define TARRAYOPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// TArrayDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+inline MakeReturn<UnaryNode<FnArcCos,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+acos(const TArray & l)
+{
+ typedef UnaryNode<FnArcCos,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcSin,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+asin(const TArray & l)
+{
+ typedef UnaryNode<FnArcSin,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcTan,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan(const TArray & l)
+{
+ typedef UnaryNode<FnArcTan,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCeil,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ceil(const TArray & l)
+{
+ typedef UnaryNode<FnCeil,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCos,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+cos(const TArray & l)
+{
+ typedef UnaryNode<FnCos,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypCos,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+cosh(const TArray & l)
+{
+ typedef UnaryNode<FnHypCos,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnExp,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+exp(const TArray & l)
+{
+ typedef UnaryNode<FnExp,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFabs,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fabs(const TArray & l)
+{
+ typedef UnaryNode<FnFabs,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFloor,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+floor(const TArray & l)
+{
+ typedef UnaryNode<FnFloor,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+log(const TArray & l)
+{
+ typedef UnaryNode<FnLog,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog10,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+log10(const TArray & l)
+{
+ typedef UnaryNode<FnLog10,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSin,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sin(const TArray & l)
+{
+ typedef UnaryNode<FnSin,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypSin,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sinh(const TArray & l)
+{
+ typedef UnaryNode<FnHypSin,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSqrt,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sqrt(const TArray & l)
+{
+ typedef UnaryNode<FnSqrt,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnTan,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+tan(const TArray & l)
+{
+ typedef UnaryNode<FnTan,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypTan,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+tanh(const TArray & l)
+{
+ typedef UnaryNode<FnHypTan,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryMinus,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const TArray & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryPlus,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const TArray & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpBitwiseNot,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator~(const TArray & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpIdentity,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+PETE_identity(const TArray & l)
+{
+ typedef UnaryNode<OpIdentity,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpNot,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!(const TArray & l)
+{
+ typedef UnaryNode<OpNot,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+peteCast(const T1&, const TArray & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<BinaryNode<OpAdd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpAdd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpSubtract,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpSubtract,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMultiply,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpMultiply,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpDivide,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpDivide,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMod,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpMod,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseAnd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseOr,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseXor,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnLdexp,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<FnLdexp,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnPow,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<FnPow,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnFmod,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<FnFmod,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnArcTan2,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLT,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpLT,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpLE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGT,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpGT,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpGE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpEQ,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpEQ,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpNE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpNE,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpAnd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpAnd,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpOr,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpOr,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLeftShift,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpRightShift,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const TArray & r)
+{
+ typedef BinaryNode<OpRightShift,
+ CreateLeaf<TArray >::Leaf_t,
+ CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const TArray & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const TArray & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<TArray >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const TArray & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<TArray >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<TArray >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+#endif // TARRAYOPS_H
+
diff --git a/tools/pete-2.1.1/examples/TArray/makefile
b/tools/pete-2.1.1/examples/TArray/makefile
new file mode 100644
index 0000000..d6ff6d6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/makefile
@@ -0,0 +1,58 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: TArray
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes TArrayDefs.in \
+ --guard TARRAYOPS_H > TArrayOperators.h
+
+TArray: TArray.cpp TArray.h TArrayOperators.h
+ $(CXX) -o TArray $(CXXINC) $(CXXOPTARG) TArray.cpp
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -rf TArray ii_files ti_files
+
+run: TArray
+ TArray
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.6 $ $Date: 2000/01/04 01:29:44 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/README
b/tools/pete-2.1.1/examples/Vec3/README
new file mode 100644
index 0000000..669fddb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/README
@@ -0,0 +1,15 @@
+/*******************************************************************
+ * *
+ * Vec3 example *
+ * *
+ *******************************************************************/
+
+This example illustrates the addition of expression template
+capabilities to a user-defined class.
+See the tutorial in html/tut-1.html for a description of this example.
+
+Vec3.h defines a simple vector class that contains 3 elements.
+Unlike the STL example in examples/Vector, we can add an assignment
+operator to this class that recognizes PETE expressions. Therefore
+this example doesn't tell the MakeOperators tool to generate
+assignment operators that would call the evaluate() function.
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3.cpp
b/tools/pete-2.1.1/examples/Vec3/Vec3.cpp
new file mode 100644
index 0000000..f1358b7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3.cpp
@@ -0,0 +1,72 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "Vec3.h"
+
+int main()
+{
+ Vec3 a, b, c;
+
+ c = 4;
+
+ b[0] = -1;
+ b[1] = -2;
+ b[2] = -3;
+
+ a = b + c;
+
+ cout << a << endl;
+
+ Vec3 d;
+ const Expression<BinaryNode<OpAdd,
+ Reference<Vec3>, Reference<Vec3> > > &expr1 = b + c;
+ d = expr1;
+ cout << d << endl;
+
+ int num = forEach(expr1, CountLeaf(), SumCombine());
+ cout << num << endl;
+
+ const Expression<BinaryNode<OpAdd, Reference<Vec3>,
+ BinaryNode<OpMultiply, Scalar<int>,
+ Reference<Vec3> > > > &expr2 = b + 3 * c;
+ num = forEach(expr2, CountLeaf(), SumCombine());
+ cout << num << endl;
+
+ const Expression<BinaryNode<OpAdd, Reference<Vec3>,
+ BinaryNode<OpMultiply, Reference<Vec3>,
+ Reference<Vec3> > > > &expr3 = b + c * d;
+ num = forEach(expr3, CountLeaf(), SumCombine());
+ cout << num << endl;
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vec3.cpp,v $ $Author: swhaney $
+// $Revision: 1.8 $ $Date: 2000/01/04 01:40:16 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3.h
b/tools/pete-2.1.1/examples/Vec3/Vec3.h
new file mode 100644
index 0000000..31c3d67
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3.h
@@ -0,0 +1,214 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+//=============================================================================
+// Vec3.h
+//-----------------------------------------------------------------------------
+// DESCRIPTION:
+//
+// This example serves two purposes. First, it demonstrates the
+// construction of an expression-template-aware array class. Second, it
+// demonstrates the flexibility of the ForEach type of template-metaprogram.
+//
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_VEC3_VEC3_H
+#define PETE_EXAMPLES_VEC3_VEC3_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+
+#include <iostream.h>
+
+//-----------------------------------------------------------------------------
+//
+// CLASS NAME
+// Vec3
+//
+// DESCRIPTION
+// A "tiny" three-element expression-template (ET) array class.
+//
+//-----------------------------------------------------------------------------
+
+class Vec3
+{
+public:
+
+ //---------------------------------------------------------------------------
+ // Constructors and Destructor
+ //---------------------------------------------------------------------------
+
+ Vec3() { d[0] = d[1] = d[2] = 0; }
+
+ Vec3(int i, int j, int k)
+ {
+ d[0] = i; d[1] = j; d[2] = k;
+ }
+
+ Vec3(const Vec3 &v)
+ {
+ d[0] = v.d[0]; d[1] = v.d[1]; d[2] = v.d[2];
+ }
+
+ ~Vec3() {}
+
+
+ //---------------------------------------------------------------------------
+ // Vec3 and scalar assigment operators
+ //---------------------------------------------------------------------------
+
+ Vec3 &operator=(const Vec3 &v)
+ {
+ d[0] = v.d[0]; d[1] = v.d[1]; d[2] = v.d[2];
+ return *this;
+ }
+
+ Vec3 &operator=(int i)
+ {
+ d[0] = d[1] = d[2] = i;
+ return *this;
+ }
+
+ //---------------------------------------------------------------------------
+ // Assignment operator taking expression:
+ //---------------------------------------------------------------------------
+
+ template<class RHS>
+ Vec3 &operator=(const Expression<RHS> &rhs)
+ {
+ d[0] = forEach(rhs, EvalLeaf1(0), OpCombine());
+ d[1] = forEach(rhs, EvalLeaf1(1), OpCombine());
+ d[2] = forEach(rhs, EvalLeaf1(2), OpCombine());
+
+ return *this;
+ }
+
+ //---------------------------------------------------------------------------
+ // Indexing operators
+ //---------------------------------------------------------------------------
+
+ int &operator[](int i) { return d[i]; }
+ int operator[](int i) const { return d[i]; }
+
+ //---------------------------------------------------------------------------
+ // Print method used by operator<< free function.
+ //---------------------------------------------------------------------------
+
+ void print(ostream &os) const
+ {
+ os << "{" << d[0] << "," << d[1] << "," << d[2] << "}";
+ }
+
+private:
+
+ // The underlying complicated data structure
+
+ int d[3];
+
+};
+
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<>
+struct CreateLeaf<Vec3>
+{
+ typedef Reference<Vec3> Leaf_t;
+ inline static
+ Leaf_t make(const Vec3 &a) { return Leaf_t(a); }
+};
+
+//-----------------------------------------------------------------------------
+// ostream inserter for Vec3s
+//-----------------------------------------------------------------------------
+
+ostream &operator<<(ostream &os, const Vec3 &a)
+{
+ a.print(os);
+ return os;
+}
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the EvalLeaf1
+// tag to a Vec3. The apply method simply returns the array
+// evaluated at the point.
+//-----------------------------------------------------------------------------
+
+template<>
+struct LeafFunctor<Vec3, EvalLeaf1>
+{
+ typedef int Type_t;
+ static Type_t apply(const Vec3 &a, const EvalLeaf1 &f)
+ { return a[f.val1()]; }
+};
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the CountLeaf
+// tag to a Vec3. The apply method simply returns 1 for a Vec3 and 0 for
+// anything else.
+//-----------------------------------------------------------------------------
+
+struct CountLeaf { };
+
+template<>
+struct LeafFunctor<Vec3, CountLeaf>
+{
+ typedef int Type_t;
+ static Type_t apply(const Vec3 &, const CountLeaf &)
+ { return 1; }
+};
+
+template<class T>
+struct LeafFunctor<T, CountLeaf>
+{
+ typedef int Type_t;
+ static Type_t apply(const T &a, const CountLeaf &)
+ { return 0; }
+};
+
+// We put this include at the end because
+// the operators can't be defined until after Vec3 and
+// CreateLeaf<Vec3> have been defined.
+// (Since Vec3 isn't templated the operators aren't just
+// templates.)
+
+#include "Vec3Operators.h"
+
+#endif // PETE_EXAMPLES_VEC3_VEC3_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vec3.h,v $ $Author: swhaney $
+// $Revision: 1.11 $ $Date: 2000/01/04 01:40:16 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in
b/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in
new file mode 100644
index 0000000..ca64eb4
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in
@@ -0,0 +1,4 @@
+classes
+-----
+ ARG = ""
+ CLASS = "Vec3"
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h
b/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h
new file mode 100644
index 0000000..54ceb9e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h
@@ -0,0 +1,2964 @@
+#ifndef VEC3OPS_H
+#define VEC3OPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Vec3Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+inline MakeReturn<UnaryNode<FnArcCos,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+acos(const Vec3 & l)
+{
+ typedef UnaryNode<FnArcCos,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcSin,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+asin(const Vec3 & l)
+{
+ typedef UnaryNode<FnArcSin,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcTan,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan(const Vec3 & l)
+{
+ typedef UnaryNode<FnArcTan,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCeil,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ceil(const Vec3 & l)
+{
+ typedef UnaryNode<FnCeil,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCos,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+cos(const Vec3 & l)
+{
+ typedef UnaryNode<FnCos,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypCos,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+cosh(const Vec3 & l)
+{
+ typedef UnaryNode<FnHypCos,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnExp,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+exp(const Vec3 & l)
+{
+ typedef UnaryNode<FnExp,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFabs,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fabs(const Vec3 & l)
+{
+ typedef UnaryNode<FnFabs,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFloor,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+floor(const Vec3 & l)
+{
+ typedef UnaryNode<FnFloor,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+log(const Vec3 & l)
+{
+ typedef UnaryNode<FnLog,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog10,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+log10(const Vec3 & l)
+{
+ typedef UnaryNode<FnLog10,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSin,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sin(const Vec3 & l)
+{
+ typedef UnaryNode<FnSin,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypSin,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sinh(const Vec3 & l)
+{
+ typedef UnaryNode<FnHypSin,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSqrt,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sqrt(const Vec3 & l)
+{
+ typedef UnaryNode<FnSqrt,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnTan,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+tan(const Vec3 & l)
+{
+ typedef UnaryNode<FnTan,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypTan,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+tanh(const Vec3 & l)
+{
+ typedef UnaryNode<FnHypTan,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryMinus,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryPlus,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpBitwiseNot,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator~(const Vec3 & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpIdentity,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+PETE_identity(const Vec3 & l)
+{
+ typedef UnaryNode<OpIdentity,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpNot,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!(const Vec3 & l)
+{
+ typedef UnaryNode<OpNot,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Vec3 & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<BinaryNode<OpAdd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAdd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpSubtract,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMultiply,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpDivide,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpDivide,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMod,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMod,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseAnd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseOr,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseXor,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnLdexp,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnPow,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnPow,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnFmod,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnFmod,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnArcTan2,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLT,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLT,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGT,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGT,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpEQ,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpEQ,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpNE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpNE,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpAnd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAnd,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpOr,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpOr,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLeftShift,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpRightShift,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ CreateLeaf<Vec3 >::Leaf_t,
+ CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Vec3 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Vec3 >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Vec3 & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Vec3 >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Vec3 >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+#endif // VEC3OPS_H
+
diff --git a/tools/pete-2.1.1/examples/Vec3/makefile
b/tools/pete-2.1.1/examples/Vec3/makefile
new file mode 100644
index 0000000..7d74808
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Vec3
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes Vec3Defs.in \
+ --guard VEC3OPS_H > Vec3Operators.h
+
+Vec3: Vec3.cpp Vec3.h Vec3Operators.h
+ $(CXX) -o Vec3 $(CXXINC) $(CXXOPTARG) Vec3.cpp
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -f Vec3
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Vec3
+ Vec3
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.6 $ $Date: 2000/01/04 01:40:17 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/Eval.h
b/tools/pete-2.1.1/examples/Vector/Eval.h
new file mode 100644
index 0000000..fe022f7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Eval.h
@@ -0,0 +1,165 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#ifndef PETE_EXAMPLES_VECTOR_EVAL_H
+#define PETE_EXAMPLES_VECTOR_EVAL_H
+
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+#include <vector.h>
+#include "PETE/PETE.h"
+#include "VectorOperators.h"
+
+//-----------------------------------------------------------------------------
+// This file contains several class definitions that are used to evaluate
+// expressions containing STL vectors. The main function defined at the end
+// is evaluate(lhs,op,rhs), which allows the syntax:
+// vector<int> a,b,c;
+// evaluate(a,OpAssign(),b+c);
+//
+// evaluate() is called by all the global assignment operator functions
+// defined in VectorOperators.h
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+ typedef Reference<vector<T> > Leaf_t;
+ inline static
+ Leaf_t make(const vector<T, Allocator> &a) { return Leaf_t(a); }
+};
+
+//-----------------------------------------------------------------------------
+// We need to write a functor that is capable of comparing the size of
+// the vector with a stored value. Then, we supply LeafFunctor specializations
+// for Scalar<T> and STL vector leaves.
+//-----------------------------------------------------------------------------
+
+class SizeLeaf
+{
+public:
+
+ SizeLeaf(int s) : size_m(s) { }
+ SizeLeaf(const SizeLeaf &model) : size_m(model.size_m) { }
+ bool operator()(int s) const { return size_m == s; }
+
+private:
+
+ int size_m;
+
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, SizeLeaf>
+{
+ typedef bool Type_t;
+ inline static
+ bool apply(const Scalar<T> &, const SizeLeaf &)
+ {
+ // Scalars always conform.
+
+ return true;
+ }
+};
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, SizeLeaf>
+{
+ typedef bool Type_t;
+ inline static
+ bool apply(const vector<T, Allocator> &v, const SizeLeaf &s)
+ {
+ return s(v.size());
+ }
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate expression with vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>,EvalLeaf1>
+{
+ typedef T Type_t;
+ inline static
+ Type_t apply(const vector<T, Allocator>& vec,const EvalLeaf1 &f)
+ {
+ return vec[f.val1()];
+ }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op,
+ const Expression<RHS> &rhs)
+{
+ if (forEach(rhs, SizeLeaf(lhs.size()), AndCombine()))
+ {
+ // We get here if the vectors on the RHS are the same size as those on
+ // the LHS.
+
+ for (int i = 0; i < lhs.size(); ++i)
+ {
+ // The actual assignment operation is performed here.
+ // PETE operator tags all define operator() to perform the operation.
+ // (In this case op performs an assignment.) forEach is used
+ // to compute the rhs value. EvalLeaf1 gets the
+ // values at each node using random access, and the tag
+ // OpCombine tells forEach to use the operator tags in the
expression
+ // to combine values together.
+
+ op(lhs[i], forEach(rhs, EvalLeaf1(i), OpCombine()));
+ }
+ }
+ else
+ {
+ cerr << "Error: LHS and RHS don't conform." << endl;
+ exit(1);
+ }
+}
+
+#endif // PETE_EXAMPLES_VECTOR_EVAL_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Eval.h,v $ $Author: swhaney $
+// $Revision: 1.11 $ $Date: 2000/01/04 01:39:17 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/Makefile.user
b/tools/pete-2.1.1/examples/Vector/Makefile.user
new file mode 100644
index 0000000..8aa65e3
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Makefile.user
@@ -0,0 +1,62 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG =
+
+default: Vector
+
+operators: VectorDefs.in
+ $(MAKEEXPR) --classes VectorDefs.in --assign-ops \
+ --o VectorOperators.h
+
+Vector: Vector.cpp Eval.h VectorOperators.h
+ $(CXX) -o Vector $(CXXINC) $(CXXARG) Vector.cpp
+
+clean:
+ rm -f Vector
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Vector
+ Vector
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: Makefile.user,v $ $Author: swhaney $
+# $Revision: 1.5 $ $Date: 2000/01/04 01:39:17 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/README
b/tools/pete-2.1.1/examples/Vector/README
new file mode 100644
index 0000000..c80d1a9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/README
@@ -0,0 +1,39 @@
+/*******************************************************************
+ * *
+ * STL vector example *
+ * *
+ *******************************************************************/
+
+This example illustrates how simple it is to use PETE with a
+Standard Template Library (STL) container class. See the tutorial in
+html/tut-2.html for a description of this example.
+
+The four-line input file VectorDefs.in describes the STL vector class
+to the MakeOperators tool which automatically produces the 249
+operator definitions in VectorOperators.h. (Type 'make operators'
+to rebuild VectorOperators.h.) Including these operators in your
+code will cause arbitrary mathematical expressions involving STL
+vectors, such as a+b*sin(2+c)/d, to return expression template objects.
+
+The file Eval.h contains the components necessary to efficiently
+evaluate the resulting expression template objects. It defines
+a CreateLeaf functor that tells PETE to store references to the
+vectors in the expression tree (to avoid unnecessary copies),
+a SizeLeaf functor that is used to check that the vectors conform,
+and an evaluate() function that will be called by the PETE global
+assignment operators, like assign(), operator+= etc.
+
+By including Eval.h, and VectorOperators.h, you can write
+high-level data-parallel code like:
+
+std::vector<double> a(100),b(100),c(100);
+...
+a = b+2*sin(c-4.0);
+
+which will be implemented by an efficient loop that involves
+no temporary arrays:
+
+for (i=0;i<a.size();++i)
+{
+ a[i] = b[i]+2*sin(c[i]-4.0);
+}
diff --git a/tools/pete-2.1.1/examples/Vector/Vector.cpp
b/tools/pete-2.1.1/examples/Vector/Vector.cpp
new file mode 100644
index 0000000..7dc2c2f
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Vector.cpp
@@ -0,0 +1,69 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here. The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+//
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+// the U.S. Department of Energy. The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without
+// charge, provided that this Notice and any statement of authorship are
+// reproduced on all copies. Neither the Government nor the University
+// makes any warranty, express or implied, or assumes any liability or
+// responsibility for the use of this SOFTWARE.
+//
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+//
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "Eval.h"
+
+int main()
+{
+ int i;
+ const int n = 10;
+ vector<int> a,b,c,d;
+ vector<double> e(n);
+
+ for (i = 0; i < n; ++i)
+ {
+ a.push_back(i);
+ b.push_back(2*i);
+ c.push_back(3*i);
+ d.push_back(i);
+ }
+
+ assign(b, 2);
+ assign(d, a + b * c);
+ a += where(d < 30, b, c);
+
+ assign(e, c);
+ e += e - 4 / (c + 1);
+
+ for (i = 0; i < n; ++i)
+ {
+ cout << " a(" << i << ") = " << a[i]
+ << " b(" << i << ") = " << b[i]
+ << " c(" << i << ") = " << c[i]
+ << " d(" << i << ") = " << d[i]
+ << " e(" << i << ") = " << e[i]
+ << endl;
+ }
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vector.cpp,v $ $Author: swhaney $
+// $Revision: 1.8 $ $Date: 2000/01/04 01:39:17 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/VectorDefs.in
b/tools/pete-2.1.1/examples/Vector/VectorDefs.in
new file mode 100644
index 0000000..cbda646
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/VectorDefs.in
@@ -0,0 +1,4 @@
+classes
+-----
+ ARG = "class T[n]"
+ CLASS = "vector<T[n]>"
diff --git a/tools/pete-2.1.1/examples/Vector/VectorOperators.h
b/tools/pete-2.1.1/examples/Vector/VectorOperators.h
new file mode 100644
index 0000000..fd2f839
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/VectorOperators.h
@@ -0,0 +1,3106 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// VectorDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+acos(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+asin(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+atan(const vector<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cos(const vector<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+exp(const vector<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+floor(const vector<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log(const vector<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log10(const vector<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sin(const vector<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tan(const vector<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<vector<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<vector<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<vector<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnArcTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCeil,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypCos,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnExp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFabs,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnFloor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnLog10,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypSin,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnSqrt,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+ typedef UnaryNode<FnHypTan,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryMinus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpUnaryPlus,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpBitwiseNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpIdentity,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+ typedef UnaryNode<OpNot,
+ typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+ typedef UnaryNode<OpCast<T1>,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(l),
+ CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAdd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpSubtract,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMultiply,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpDivide,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpMod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpBitwiseXor,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnLdexp,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnPow,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnFmod,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<FnArcTan2,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGT,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpGE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpEQ,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpNE,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpAnd,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpOr,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpLeftShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+ typedef BinaryNode<OpRightShift,
+ typename CreateLeaf<T1 >::Leaf_t,
+ typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<T1 >::make(l),
+ CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+ typedef TrinaryNode<FnWhere,
+ typename CreateLeaf<Expression<T1> >::Leaf_t,
+ typename CreateLeaf<T2 >::Leaf_t,
+ typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+ return MakeReturn<Tree_t>::make(Tree_t(
+ CreateLeaf<Expression<T1> >::make(c),
+ CreateLeaf<T2 >::make(t),
+ CreateLeaf<T3 >::make(f)));
+}
+#endif // PETE_EXPRESSION_OPERATORS
+
+template<class T1,class RHS>
+inline
+vector<T1>& assign(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator+=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator-=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator*=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator/=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator%=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator|=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator&=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator^=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator<<=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator>>=(vector<T1>& lhs,const RHS& rhs)
+{
+ typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+ return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/Vector/makefile
b/tools/pete-2.1.1/examples/Vector/makefile
new file mode 100644
index 0000000..e8d4638
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+# prepare derivative works and publicly display this SOFTWARE without
+# charge, provided that this Notice and any statement of authorship are
+# reproduced on all copies. Neither the Government nor the University
+# makes any warranty, express or implied, or assumes any liability or
+# responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Vector
+
+operators: $(MAKEEXPR)
+ $(MAKEEXPR) --classes VectorDefs.in --assign-ops \
+ > VectorOperators.h
+
+Vector: Vector.cpp Eval.h VectorOperators.h
+ $(CXX) -o Vector $(CXXINC) $(CXXOPTARG) Vector.cpp
+
+$(MAKEEXPR):
+ make -C$(PROJECTROOT) tools
+
+clean:
+ rm -f Vector
+ rm -rf ti_files
+ rm -rf ii_files
+
+run: Vector
+ Vector
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: swhaney $
+# $Revision: 1.11 $ $Date: 2000/01/04 01:39:18 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/makefile
b/tools/pete-2.1.1/examples/makefile
new file mode 100644
index 0000000..2c58e2e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/makefile
@@ -0,0 +1,72 @@
+# ACL:license
+# ----------------------------------------------------------------------
+# This software and ancillary information (herein called "SOFTWARE")
+# called PETE (Portable Expression Template Engine) is
+# made available under the terms described here. The SOFTWARE has been
+# approved for release with associated LA-CC Number LA-CC-99-5.
+#
+# Unless otherwise indicated, this SOFTWARE has been authored by an
+# employee or employees of the University of California, operator of the
+# Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+# the U.S. Department of Energy. The U.S. Government has rights to use,
+# reproduce, and distribute this SOFTWARE, and to allow others to do so.
+# The public may copy and use this SOFTWARE, FOR NONCOMMERCIAL USE ONLY,
+# without charge, provided that this Notice and any statement of
+# authorship are reproduced on all copies. Neither the Government nor
+# the University makes any warranty, express or implied, or assumes any
+# liability or responsibility for the use of this SOFTWARE.
+#
+# If SOFTWARE is modified to produce derivative works, such modified
+# SOFTWARE should be clearly marked, so as not to confuse it with the
+# version available from LANL.
+#
+# For more information about PETE, send e-mail to pete@acl.lanl.gov,
+# or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+# ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default:
+ make -CRGB
+ make -CTArray
+ make -CVec3
+ make -CVector
+ make -CMixed
+ make -CDDJ
+
+operators:
+ make -CRGB operators
+ make -CTArray operators
+ make -CVec3 operators
+ make -CVector operators
+ make -CMixed operators
+ make -CDDJ operators
+
+run:
+ make -CRGB run
+ make -CTArray run
+ make -CVec3 run
+ make -CVector run
+ make -CMixed run
+ make -CDDJ run
+
+clean:
+ make -CRGB clean
+ make -CTArray clean
+ make -CVec3 clean
+ make -CVector clean
+ make -CMixed clean
+ make -CDDJ clean
+
+# ACL:rcsinfo
+# ----------------------------------------------------------------------
+# $RCSfile: makefile,v $ $Author: sa_smith $
+# $Revision: 1.6 $ $Date: 1999/02/03 21:54:07 $
+# ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/html/PETETutorials.pdf
b/tools/pete-2.1.1/html/PETETutorials.pdf
new file mode 100644
index 0000000..b951801
--- /dev/null
+++ b/tools/pete-2.1.1/html/PETETutorials.pdf
@@ -0,0 +1,2163 @@
+%PDF-1.3
%����
+552 0 obj
<<
/Linearized 1
/O 555
/H [ 19105 1632 ]
/L 283029
/E 99128
/N 51
/T 271870
>>
endobj
xref
552 926
0000000016 00000 n
+0000018873 00000 n
+0000019035 00000 n
+0000020737 00000 n
+0000021068 00000 n
+0000021152 00000 n
+0000021259 00000 n
+0000021388 00000 n
+0000021532 00000 n
+0000021701 00000 n
+0000021869 00000 n
+0000022318 00000 n
+0000022493 00000 n
+0000022720 00000 n
+0000022885 00000 n
+0000023717 00000 n
+0000023910 00000 n
+0000024360 00000 n
+0000024541 00000 n
+0000025418 00000 n
+0000025589 00000 n
+0000026547 00000 n
+0000026703 00000 n
+0000026889 00000 n
+0000027088 00000 n
+0000027150 00000 n
+0000027212 00000 n
+0000027273 00000 n
+0000027334 00000 n
+0000027395 00000 n
+0000027456 00000 n
+0000027517 00000 n
+0000027617 00000 n
+0000027677 00000 n
+0000027738 00000 n
+0000027807 00000 n
+0000027864 00000 n
+0000027921 00000 n
+0000027982 00000 n
+0000028043 00000 n
+0000028240 00000 n
+0000028835 00000 n
+0000029015 00000 n
+0000029139 00000 n
+0000029236 00000 n
+0000029306 00000 n
+0000029430 00000 n
+0000029667 00000 n
+0000029788 00000 n
+0000029912 00000 n
+0000029970 00000 n
+0000030028 00000 n
+0000030086 00000 n
+0000030144 00000 n
+0000030202 00000 n
+0000030260 00000 n
+0000030304 00000 n
+0000030348 00000 n
+0000030392 00000 n
+0000030436 00000 n
+0000030480 00000 n
+0000030524 00000 n
+0000030582 00000 n
+0000030640 00000 n
+0000030698 00000 n
+0000030756 00000 n
+0000030826 00000 n
+0000030884 00000 n
+0000030947 00000 n
+0000031010 00000 n
+0000031073 00000 n
+0000031136 00000 n
+0000031199 00000 n
+0000031262 00000 n
+0000031325 00000 n
+0000031383 00000 n
+0000031453 00000 n
+0000031511 00000 n
+0000031569 00000 n
+0000031826 00000 n
+0000031884 00000 n
+0000031948 00000 n
+0000032013 00000 n
+0000032077 00000 n
+0000032141 00000 n
+0000032205 00000 n
+0000032269 00000 n
+0000032333 00000 n
+0000032397 00000 n
+0000032462 00000 n
+0000032526 00000 n
+0000032590 00000 n
+0000032654 00000 n
+0000032718 00000 n
+0000032782 00000 n
+0000032846 00000 n
+0000032910 00000 n
+0000032973 00000 n
+0000033061 00000 n
+0000033125 00000 n
+0000033189 00000 n
+0000033253 00000 n
+0000033317 00000 n
+0000033381 00000 n
+0000033445 00000 n
+0000033509 00000 n
+0000033573 00000 n
+0000033635 00000 n
+0000033721 00000 n
+0000033778 00000 n
+0000033847 00000 n
+0000033910 00000 n
+0000033973 00000 n
+0000034036 00000 n
+0000034099 00000 n
+0000034163 00000 n
+0000034227 00000 n
+0000034291 00000 n
+0000034400 00000 n
+0000034469 00000 n
+0000034538 00000 n
+0000034607 00000 n
+0000034676 00000 n
+0000034745 00000 n
+0000034814 00000 n
+0000034883 00000 n
+0000034951 00000 n
+0000035015 00000 n
+0000035083 00000 n
+0000035147 00000 n
+0000035215 00000 n
+0000035279 00000 n
+0000035347 00000 n
+0000035411 00000 n
+0000035479 00000 n
+0000035543 00000 n
+0000035611 00000 n
+0000035675 00000 n
+0000035743 00000 n
+0000035807 00000 n
+0000035871 00000 n
+0000035929 00000 n
+0000035987 00000 n
+0000036045 00000 n
+0000036103 00000 n
+0000036161 00000 n
+0000036219 00000 n
+0000036283 00000 n
+0000036347 00000 n
+0000036411 00000 n
+0000036475 00000 n
+0000036539 00000 n
+0000036603 00000 n
+0000036673 00000 n
+0000036743 00000 n
+0000036791 00000 n
+0000036916 00000 n
+0000037020 00000 n
+0000037117 00000 n
+0000037221 00000 n
+0000037321 00000 n
+0000037431 00000 n
+0000037528 00000 n
+0000037625 00000 n
+0000037719 00000 n
+0000037814 00000 n
+0000037870 00000 n
+0000037959 00000 n
+0000038023 00000 n
+0000038087 00000 n
+0000038151 00000 n
+0000038215 00000 n
+0000038279 00000 n
+0000038343 00000 n
+0000038407 00000 n
+0000038471 00000 n
+0000038551 00000 n
+0000038595 00000 n
+0000038659 00000 n
+0000038723 00000 n
+0000038787 00000 n
+0000038852 00000 n
+0000038972 00000 n
+0000039059 00000 n
+0000039114 00000 n
+0000039200 00000 n
+0000039268 00000 n
+0000039391 00000 n
+0000039505 00000 n
+0000039582 00000 n
+0000039751 00000 n
+0000039965 00000 n
+0000040051 00000 n
+0000040165 00000 n
+0000040270 00000 n
+0000040338 00000 n
+0000040443 00000 n
+0000040639 00000 n
+0000040871 00000 n
+0000041012 00000 n
+0000041181 00000 n
+0000041468 00000 n
+0000041527 00000 n
+0000041559 00000 n
+0000041609 00000 n
+0000041695 00000 n
+0000041946 00000 n
+0000042115 00000 n
+0000042147 00000 n
+0000042179 00000 n
+0000042284 00000 n
+0000042544 00000 n
+0000042702 00000 n
+0000042832 00000 n
+0000042919 00000 n
+0000043039 00000 n
+0000043151 00000 n
+0000043263 00000 n
+0000043294 00000 n
+0000043325 00000 n
+0000043421 00000 n
+0000043508 00000 n
+0000043595 00000 n
+0000043739 00000 n
+0000043818 00000 n
+0000043905 00000 n
+0000044196 00000 n
+0000044348 00000 n
+0000044403 00000 n
+0000044499 00000 n
+0000044976 00000 n
+0000045153 00000 n
+0000045281 00000 n
+0000045345 00000 n
+0000045409 00000 n
+0000045472 00000 n
+0000045535 00000 n
+0000045598 00000 n
+0000045661 00000 n
+0000045724 00000 n
+0000045787 00000 n
+0000045850 00000 n
+0000045907 00000 n
+0000045976 00000 n
+0000046036 00000 n
+0000046093 00000 n
+0000046198 00000 n
+0000046261 00000 n
+0000046324 00000 n
+0000046387 00000 n
+0000046445 00000 n
+0000046503 00000 n
+0000046564 00000 n
+0000046628 00000 n
+0000046691 00000 n
+0000046755 00000 n
+0000046818 00000 n
+0000046882 00000 n
+0000046945 00000 n
+0000047009 00000 n
+0000047072 00000 n
+0000047136 00000 n
+0000047199 00000 n
+0000047264 00000 n
+0000047328 00000 n
+0000047393 00000 n
+0000047457 00000 n
+0000047521 00000 n
+0000047581 00000 n
+0000047641 00000 n
+0000047701 00000 n
+0000047761 00000 n
+0000047821 00000 n
+0000047881 00000 n
+0000047985 00000 n
+0000048048 00000 n
+0000048111 00000 n
+0000048178 00000 n
+0000048241 00000 n
+0000048308 00000 n
+0000048371 00000 n
+0000048438 00000 n
+0000048501 00000 n
+0000048568 00000 n
+0000048632 00000 n
+0000048700 00000 n
+0000048764 00000 n
+0000048832 00000 n
+0000048896 00000 n
+0000048964 00000 n
+0000049028 00000 n
+0000049096 00000 n
+0000049160 00000 n
+0000049228 00000 n
+0000049292 00000 n
+0000049360 00000 n
+0000049424 00000 n
+0000049492 00000 n
+0000049556 00000 n
+0000049624 00000 n
+0000049689 00000 n
+0000049753 00000 n
+0000049817 00000 n
+0000049882 00000 n
+0000049946 00000 n
+0000050010 00000 n
+0000050074 00000 n
+0000050154 00000 n
+0000050226 00000 n
+0000050295 00000 n
+0000050445 00000 n
+0000050541 00000 n
+0000050610 00000 n
+0000050679 00000 n
+0000050748 00000 n
+0000050817 00000 n
+0000050886 00000 n
+0000050955 00000 n
+0000051024 00000 n
+0000051093 00000 n
+0000051162 00000 n
+0000051231 00000 n
+0000051300 00000 n
+0000051363 00000 n
+0000051426 00000 n
+0000051530 00000 n
+0000051593 00000 n
+0000051657 00000 n
+0000051720 00000 n
+0000051784 00000 n
+0000051844 00000 n
+0000051981 00000 n
+0000052045 00000 n
+0000052109 00000 n
+0000052214 00000 n
+0000052277 00000 n
+0000052340 00000 n
+0000052403 00000 n
+0000052466 00000 n
+0000052529 00000 n
+0000052593 00000 n
+0000052657 00000 n
+0000052721 00000 n
+0000052784 00000 n
+0000052848 00000 n
+0000052911 00000 n
+0000052975 00000 n
+0000053038 00000 n
+0000053101 00000 n
+0000053165 00000 n
+0000053229 00000 n
+0000053294 00000 n
+0000053354 00000 n
+0000053458 00000 n
+0000053521 00000 n
+0000053584 00000 n
+0000053647 00000 n
+0000053710 00000 n
+0000053773 00000 n
+0000053836 00000 n
+0000053899 00000 n
+0000053956 00000 n
+0000054033 00000 n
+0000054093 00000 n
+0000054150 00000 n
+0000054207 00000 n
+0000054267 00000 n
+0000054327 00000 n
+0000054391 00000 n
+0000054455 00000 n
+0000054518 00000 n
+0000054581 00000 n
+0000054644 00000 n
+0000054707 00000 n
+0000054770 00000 n
+0000054830 00000 n
+0000055010 00000 n
+0000055074 00000 n
+0000055137 00000 n
+0000055201 00000 n
+0000055264 00000 n
+0000055327 00000 n
+0000055390 00000 n
+0000055453 00000 n
+0000055516 00000 n
+0000055573 00000 n
+0000055650 00000 n
+0000055710 00000 n
+0000055767 00000 n
+0000055824 00000 n
+0000055884 00000 n
+0000055944 00000 n
+0000056004 00000 n
+0000056109 00000 n
+0000056172 00000 n
+0000056235 00000 n
+0000056298 00000 n
+0000056361 00000 n
+0000056424 00000 n
+0000056488 00000 n
+0000056551 00000 n
+0000056615 00000 n
+0000056679 00000 n
+0000056739 00000 n
+0000056799 00000 n
+0000056904 00000 n
+0000056967 00000 n
+0000057030 00000 n
+0000057093 00000 n
+0000057156 00000 n
+0000057219 00000 n
+0000057282 00000 n
+0000057345 00000 n
+0000057408 00000 n
+0000057471 00000 n
+0000057531 00000 n
+0000057591 00000 n
+0000057651 00000 n
+0000057711 00000 n
+0000057771 00000 n
+0000057875 00000 n
+0000057938 00000 n
+0000058001 00000 n
+0000058064 00000 n
+0000058127 00000 n
+0000058190 00000 n
+0000058253 00000 n
+0000058316 00000 n
+0000058379 00000 n
+0000058442 00000 n
+0000058506 00000 n
+0000058566 00000 n
+0000058626 00000 n
+0000058686 00000 n
+0000058746 00000 n
+0000058806 00000 n
+0000058869 00000 n
+0000058932 00000 n
+0000058995 00000 n
+0000059058 00000 n
+0000059121 00000 n
+0000059184 00000 n
+0000059247 00000 n
+0000059307 00000 n
+0000059367 00000 n
+0000059427 00000 n
+0000059487 00000 n
+0000059592 00000 n
+0000059656 00000 n
+0000059720 00000 n
+0000059784 00000 n
+0000059848 00000 n
+0000059913 00000 n
+0000059977 00000 n
+0000060041 00000 n
+0000060106 00000 n
+0000060170 00000 n
+0000060236 00000 n
+0000060301 00000 n
+0000060363 00000 n
+0000060425 00000 n
+0000060486 00000 n
+0000060551 00000 n
+0000060615 00000 n
+0000060679 00000 n
+0000060744 00000 n
+0000060808 00000 n
+0000060873 00000 n
+0000060937 00000 n
+0000061002 00000 n
+0000061066 00000 n
+0000061130 00000 n
+0000061195 00000 n
+0000061260 00000 n
+0000061326 00000 n
+0000061391 00000 n
+0000061453 00000 n
+0000061515 00000 n
+0000061577 00000 n
+0000061639 00000 n
+0000061701 00000 n
+0000061766 00000 n
+0000061831 00000 n
+0000061895 00000 n
+0000061960 00000 n
+0000062024 00000 n
+0000062089 00000 n
+0000062158 00000 n
+0000062223 00000 n
+0000062292 00000 n
+0000062357 00000 n
+0000062427 00000 n
+0000062492 00000 n
+0000062557 00000 n
+0000062623 00000 n
+0000062693 00000 n
+0000062759 00000 n
+0000062829 00000 n
+0000062895 00000 n
+0000062965 00000 n
+0000063031 00000 n
+0000063101 00000 n
+0000063167 00000 n
+0000063237 00000 n
+0000063303 00000 n
+0000063368 00000 n
+0000063433 00000 n
+0000063506 00000 n
+0000063605 00000 n
+0000063678 00000 n
+0000063751 00000 n
+0000063824 00000 n
+0000063897 00000 n
+0000063970 00000 n
+0000064051 00000 n
+0000064124 00000 n
+0000064197 00000 n
+0000064379 00000 n
+0000064444 00000 n
+0000064509 00000 n
+0000064574 00000 n
+0000064639 00000 n
+0000064704 00000 n
+0000064769 00000 n
+0000064834 00000 n
+0000064898 00000 n
+0000064958 00000 n
+0000065040 00000 n
+0000065102 00000 n
+0000065162 00000 n
+0000065222 00000 n
+0000065284 00000 n
+0000065346 00000 n
+0000065408 00000 n
+0000065472 00000 n
+0000065536 00000 n
+0000065600 00000 n
+0000065664 00000 n
+0000065728 00000 n
+0000065792 00000 n
+0000065857 00000 n
+0000065921 00000 n
+0000065985 00000 n
+0000066050 00000 n
+0000066115 00000 n
+0000066181 00000 n
+0000066246 00000 n
+0000066312 00000 n
+0000066378 00000 n
+0000066443 00000 n
+0000066508 00000 n
+0000066572 00000 n
+0000066637 00000 n
+0000066701 00000 n
+0000066765 00000 n
+0000066830 00000 n
+0000066899 00000 n
+0000066964 00000 n
+0000067033 00000 n
+0000067099 00000 n
+0000067169 00000 n
+0000067235 00000 n
+0000067305 00000 n
+0000067371 00000 n
+0000067441 00000 n
+0000067507 00000 n
+0000067572 00000 n
+0000067638 00000 n
+0000067708 00000 n
+0000067774 00000 n
+0000067844 00000 n
+0000067910 00000 n
+0000067980 00000 n
+0000068045 00000 n
+0000068118 00000 n
+0000068199 00000 n
+0000068272 00000 n
+0000068345 00000 n
+0000068418 00000 n
+0000068517 00000 n
+0000068590 00000 n
+0000068663 00000 n
+0000068736 00000 n
+0000068809 00000 n
+0000068915 00000 n
+0000068980 00000 n
+0000069045 00000 n
+0000069110 00000 n
+0000069175 00000 n
+0000069240 00000 n
+0000069304 00000 n
+0000069364 00000 n
+0000069446 00000 n
+0000069508 00000 n
+0000069568 00000 n
+0000069628 00000 n
+0000069690 00000 n
+0000069752 00000 n
+0000069896 00000 n
+0000069961 00000 n
+0000070023 00000 n
+0000070087 00000 n
+0000070152 00000 n
+0000070217 00000 n
+0000070282 00000 n
+0000070346 00000 n
+0000070411 00000 n
+0000070475 00000 n
+0000070540 00000 n
+0000070604 00000 n
+0000070668 00000 n
+0000070733 00000 n
+0000070797 00000 n
+0000070862 00000 n
+0000070927 00000 n
+0000070992 00000 n
+0000071058 00000 n
+0000071123 00000 n
+0000071189 00000 n
+0000071254 00000 n
+0000071320 00000 n
+0000071385 00000 n
+0000071450 00000 n
+0000071516 00000 n
+0000071581 00000 n
+0000071647 00000 n
+0000071717 00000 n
+0000071783 00000 n
+0000071853 00000 n
+0000071919 00000 n
+0000071989 00000 n
+0000072055 00000 n
+0000072125 00000 n
+0000072198 00000 n
+0000072288 00000 n
+0000072361 00000 n
+0000072434 00000 n
+0000072507 00000 n
+0000072569 00000 n
+0000072631 00000 n
+0000072693 00000 n
+0000072755 00000 n
+0000072817 00000 n
+0000072879 00000 n
+0000072941 00000 n
+0000073048 00000 n
+0000073112 00000 n
+0000073177 00000 n
+0000073241 00000 n
+0000073305 00000 n
+0000073370 00000 n
+0000073434 00000 n
+0000073499 00000 n
+0000073568 00000 n
+0000073633 00000 n
+0000073703 00000 n
+0000073768 00000 n
+0000073834 00000 n
+0000073899 00000 n
+0000073965 00000 n
+0000074030 00000 n
+0000074092 00000 n
+0000074154 00000 n
+0000074227 00000 n
+0000074299 00000 n
+0000074372 00000 n
+0000074434 00000 n
+0000074496 00000 n
+0000074561 00000 n
+0000074625 00000 n
+0000074689 00000 n
+0000074753 00000 n
+0000074818 00000 n
+0000074883 00000 n
+0000074947 00000 n
+0000075012 00000 n
+0000075076 00000 n
+0000075140 00000 n
+0000075206 00000 n
+0000075271 00000 n
+0000075333 00000 n
+0000075395 00000 n
+0000075500 00000 n
+0000075564 00000 n
+0000075629 00000 n
+0000075693 00000 n
+0000075758 00000 n
+0000075827 00000 n
+0000075892 00000 n
+0000075961 00000 n
+0000076026 00000 n
+0000076095 00000 n
+0000076160 00000 n
+0000076225 00000 n
+0000076291 00000 n
+0000076356 00000 n
+0000076422 00000 n
+0000076492 00000 n
+0000076558 00000 n
+0000076628 00000 n
+0000076693 00000 n
+0000076758 00000 n
+0000076823 00000 n
+0000076888 00000 n
+0000076954 00000 n
+0000077016 00000 n
+0000077089 00000 n
+0000077161 00000 n
+0000077234 00000 n
+0000077307 00000 n
+0000077388 00000 n
+0000077461 00000 n
+0000077534 00000 n
+0000077598 00000 n
+0000077662 00000 n
+0000077725 00000 n
+0000077789 00000 n
+0000077852 00000 n
+0000077916 00000 n
+0000077984 00000 n
+0000078048 00000 n
+0000078116 00000 n
+0000078180 00000 n
+0000078249 00000 n
+0000078314 00000 n
+0000078383 00000 n
+0000078448 00000 n
+0000078517 00000 n
+0000078582 00000 n
+0000078646 00000 n
+0000078710 00000 n
+0000078783 00000 n
+0000078882 00000 n
+0000078955 00000 n
+0000079028 00000 n
+0000079101 00000 n
+0000079174 00000 n
+0000079238 00000 n
+0000079301 00000 n
+0000079365 00000 n
+0000079428 00000 n
+0000079491 00000 n
+0000079555 00000 n
+0000079619 00000 n
+0000079683 00000 n
+0000079746 00000 n
+0000079806 00000 n
+0000079888 00000 n
+0000079950 00000 n
+0000080010 00000 n
+0000080070 00000 n
+0000080132 00000 n
+0000080194 00000 n
+0000080298 00000 n
+0000080361 00000 n
+0000080425 00000 n
+0000080488 00000 n
+0000080551 00000 n
+0000080613 00000 n
+0000080675 00000 n
+0000080778 00000 n
+0000080842 00000 n
+0000080905 00000 n
+0000080968 00000 n
+0000081031 00000 n
+0000081095 00000 n
+0000081158 00000 n
+0000081221 00000 n
+0000081283 00000 n
+0000081346 00000 n
+0000081410 00000 n
+0000081473 00000 n
+0000081537 00000 n
+0000081600 00000 n
+0000081663 00000 n
+0000081727 00000 n
+0000081790 00000 n
+0000081854 00000 n
+0000081916 00000 n
+0000081978 00000 n
+0000082040 00000 n
+0000082102 00000 n
+0000082207 00000 n
+0000082270 00000 n
+0000082333 00000 n
+0000082397 00000 n
+0000082460 00000 n
+0000082524 00000 n
+0000082587 00000 n
+0000082649 00000 n
+0000082711 00000 n
+0000082773 00000 n
+0000082837 00000 n
+0000082900 00000 n
+0000082964 00000 n
+0000083028 00000 n
+0000083091 00000 n
+0000083154 00000 n
+0000083217 00000 n
+0000083281 00000 n
+0000083349 00000 n
+0000083413 00000 n
+0000083482 00000 n
+0000083547 00000 n
+0000083616 00000 n
+0000083681 00000 n
+0000083750 00000 n
+0000083815 00000 n
+0000083884 00000 n
+0000083949 00000 n
+0000084018 00000 n
+0000084082 00000 n
+0000084155 00000 n
+0000084263 00000 n
+0000084336 00000 n
+0000084409 00000 n
+0000084482 00000 n
+0000084555 00000 n
+0000084628 00000 n
+0000084688 00000 n
+0000084748 00000 n
+0000084823 00000 n
+0000084883 00000 n
+0000084943 00000 n
+0000085047 00000 n
+0000085110 00000 n
+0000085174 00000 n
+0000085237 00000 n
+0000085300 00000 n
+0000085364 00000 n
+0000085432 00000 n
+0000085496 00000 n
+0000085564 00000 n
+0000085628 00000 n
+0000085697 00000 n
+0000085761 00000 n
+0000085825 00000 n
+0000085890 00000 n
+0000085954 00000 n
+0000086019 00000 n
+0000086081 00000 n
+0000086143 00000 n
+0000086216 00000 n
+0000086297 00000 n
+0000086370 00000 n
+0000086443 00000 n
+0000086505 00000 n
+0000086567 00000 n
+0000086630 00000 n
+0000086694 00000 n
+0000086757 00000 n
+0000086821 00000 n
+0000086884 00000 n
+0000086946 00000 n
+0000087008 00000 n
+0000087072 00000 n
+0000087135 00000 n
+0000087199 00000 n
+0000087262 00000 n
+0000087326 00000 n
+0000087389 00000 n
+0000087453 00000 n
+0000087516 00000 n
+0000087580 00000 n
+0000087643 00000 n
+0000087705 00000 n
+0000087767 00000 n
+0000087829 00000 n
+0000087891 00000 n
+0000087953 00000 n
+0000088016 00000 n
+0000088080 00000 n
+0000088143 00000 n
+0000088206 00000 n
+0000088269 00000 n
+0000088333 00000 n
+0000088396 00000 n
+0000088460 00000 n
+0000088523 00000 n
+0000088587 00000 n
+0000088651 00000 n
+0000088713 00000 n
+0000088775 00000 n
+0000088837 00000 n
+0000088941 00000 n
+0000089004 00000 n
+0000089068 00000 n
+0000089131 00000 n
+0000089195 00000 n
+0000089257 00000 n
+0000089319 00000 n
+0000089381 00000 n
+0000089445 00000 n
+0000089509 00000 n
+0000089572 00000 n
+0000089636 00000 n
+0000089699 00000 n
+0000089762 00000 n
+0000089807 00000 n
+0000089852 00000 n
+0000089897 00000 n
+0000089942 00000 n
+0000090057 00000 n
+0000090295 00000 n
+0000090532 00000 n
+0000090764 00000 n
+0000090997 00000 n
+0000091230 00000 n
+0000091462 00000 n
+0000091693 00000 n
+0000091934 00000 n
+0000092167 00000 n
+0000092376 00000 n
+0000092487 00000 n
+0000093337 00000 n
+0000093360 00000 n
+0000093469 00000 n
+0000093575 00000 n
+0000098365 00000 n
+0000098388 00000 n
+0000098641 00000 n
+0000098678 00000 n
+0000098702 00000 n
+0000098758 00000 n
+0000019105 00000 n
+0000020713 00000 n
+trailer
<<
/Size 1478
/Info 446 0 R
/Root 553 0 R
/Prev 271859
/ID[<55bc04fb77f364292aaad31d1ab19522><55bc04fb77f364292aaad31d1ab19522>]
>>
startxref
0
%%EOF
553 0 obj
<<
/Type /Catalog
/Pages 445 0 R
/Names 554 0 R
/StructTreeRoot 575 0 R
/SpiderInfo 452 0 R
/Outlines 556 0 R
/PageMode /UseOutlines
>>
endobj
554 0 obj
<<
/IDS 450 0 R
/URLS 451 0 R
/Dests 405 0 R
>>
endobj
1476 0 obj
<< /S 834 /O 2488 /E 2504 /Filter /FlateDecode /Length 1477 0 R >>
stream
+H��UmlSU~����
+[�m��Y��l|lj��}����Ȁ�c�$5�8#�s�1i"K:��2��hH3~05�Ec25!�_�0K��G�E���s�-�6�Y���y��=Ϲ @�� H"T@�S"��X��
2@�m�@���(�نd3T ��Pp �Q�
���Q{�72K_6�U{���)9C>��S;tkk�^V��t\�$����%��"�E��N@}ޓodק
�q���A� � �F~'vu�K���p[>T3��&�l>=�;��32�{���u��r�Xϩ���5�u.ES����N�)̯M�
�i�{����gCl�;u�+NJgc������r<�w�^�n<]��E���ꢓ0��≥3�:�ҵ�䅕���$�E��X��_
+e�"�%�7[���M���,�Lݍ/ h�� J{�Ȼ���\��g����W���N-�<tq%�Bl����!/r��(B�g��B�{
+)�K
b�M��-�aGp})t�� 55 <>�ˁ����/uO"��#e�����E��h2I [vk���
�zͦ�"C#xFq���k���7
+x�U��I�@'�I�ӴR��(h2hb/n�C��g�2pQê!��r�1
+04*���C�
��Ƌ4��������Wd��7��F�mO=+_�~9$�?�P��QȈ�Ft�Ak�Ӣ�F�,8�X�꧄���ƭ�$ӢVO68�>!��AA��+��A='�뉪@D�>�%�'X�N��YIm"aE=,�|��/�cM����ȟ:l��U!_
�%�3�� �*,ӛ�iE-a.�Z �s)����Rycbة�
�xJ�s�bY-4���𗤏w܉�����+�v!ղ�C��������o[�g��Ơrykb��C���j l�
��sN}� �"�m$�Y3�!5�B!�:UY�[� 0��V�
�I�J�.T}�G�I��֏Λ�"I�[L��6l
�|����f��f0B�HL�͓�a�bI�h`�@m�����V
�*�$��x�����CR ;�!Y��.fֺ��OG*c����t:ё�Śٙ�3{j͘1
+c^̨��A!_�Qw`@���J����u<��vA+�#6�FX���$��(������L#5��-ʩ��B���
+�L��0W�B�-dBA�R�<:��� Iq�&j�`�M4�f�<�
+��]�f��"tؼ��w�I����Yth��� /:���.l .|f�R�Q���"+���!ru�)�(����n
1b����NF�"�av��a�L�<o�4뢑̗��?�m�]�2'�� �|he�5
.Z�7�4��M4~��זG�kð�D���&��T�ӖU��н��w�z�M���
d�qk�ky��d,9<��d�)0��;����3�`T�m���c1[O�z[N�"����D�j
��V��C'�7�X%�[aY�椏Z�����#����� �n�_�`�1�� ���? 6��:
endstream
endobj
1477 0 obj
1503
endobj
555 0 obj
<<
/Type /Page
/MediaBox [ 0 0 612 792 ]
/Parent 468 0 R
/StructParents 0
/Annots 1453 0 R
/Contents 1465 0 R
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F8 1467 0 R >> /XObject <<
/Im18 1469 0 R >>
/ProcSet [ /PDF /Text /ImageC /ImageI ] >>
/ID 1475 0 R
/CropBox [ 0 0 612 792 ]
/Rotate 0
>>
endobj
556 0 obj
<<
/Count 10
/Type /Outlines
/First 557 0 R
/Last 557 0 R
>
>
endobj
557 0 obj
<<
/Title (PETE Tutorials)
/Parent 556 0 R
/First 558 0 R
/Last 559 0 R
/Count 9
>>
endobj
558 0 obj
<<
/Title (PETE Tutorials)
/Dest [ 555 0 R /XYZ 0 792 null ]
/SE 593 0 R
/Parent 557 0 R
/Next 573 0 R
>>
endobj
559 0 obj
<<
/Title (PETE Tutorials: Legal Notice)
/Dest [ 286 0 R /XYZ 0 792 null ]
/SE 560 0 R
/Parent 557 0 R
/Prev 561 0 R
>>
endobj
560 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials: Legal Notice)
/K [ 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 795 0 R 792 0 R ]
>>
endobj
561 0 obj
<<
/Title (PETE Tutorials: MakeOperators man page)
/Dest [ 259 0 R /XYZ 0 792 null ]
/SE 562 0 R
/Parent 557 0 R
/Prev 563 0 R
/Next 559 0 R
>>
endobj
562 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials: MakeOperators man page)
/K [ 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R
900 0 R 903 0 R 902 0 R 882 0 R 878 0 R 881 0 R 880 0 R 862 0 R
851 0 R 859 0 R 854 0 R 858 0 R
804 0 R 824 0 R 806 0 R 823 0 R
808 0 R 822 0 R 810 0 R 821 0 R 812 0 R 820 0 R 814 0 R 819 0 R
816 0 R 817 0 R 818 0 R 797 0 R 798 0 R 1452 0 R 803 0 R 800 0 R
]
>>
endobj
563 0 obj
<<
/Title (PETE Tutorials: The Standard Template Library)
/Dest [ 247 0 R /XYZ 0 792 null ]
/SE 564 0 R
/Parent 557 0 R
/Prev 565 0 R
/Next 561 0 R
>>
endobj
564 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials: The Standard Template Library)
/K [ 919 0 R 920 0 R 921 0 R 922 0 R 926 0 R 924 0 R 925 0 R 918 0 R 905 0 R
917 0 R 907 0 R 914 0 R 911 0 R ]
>>
endobj
565 0 obj
<<
/Title (PETE Tutorial 3: Synthesizing Types)
/Dest [ 187 0 R /XYZ 0 792 null ]
/SE 566 0 R
/Parent 557 0 R
/Prev 567 0 R
/Next 563 0 R
>>
endobj
566 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorial 3: Synthesizing Types)
/K [ 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1065 0 R 1043 0 R 1044 0 R
1059 0 R 1055 0 R 1056 0 R 1057 0 R 1031 0 R 1014 0 R 1015 0 R 1030 0 R
1017 0
R 1029 0 R 1019 0 R 1028 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R
1027 0 R 1026 0 R 998 0 R 1012 0 R 1000 0 R 1001 0 R 1002 0 R 1011 0 R
1004 0 R 1005 0 R 1010 0 R 1007 0 R 1008 0 R 1009 0 R 997 0 R 988 0 R
996 0 R 990 0 R 995 0 R 992 0 R 994 0 R 971 0 R 986 0 R 973 0 R
985 0 R 975 0 R 984 0 R 977 0 R 983 0 R 979 0 R 980 0 R 982 0 R
956 0 R 970 0 R 958 0 R 969 0 R 960 0 R 968 0 R 962 0 R 967 0 R
964 0 R 966 0 R 944 0 R 955 0 R 946 0 R 947 0 R 954 0 R 949 0 R
950 0 R 951 0 R 952 0 R 953 0 R 943 0 R 928 0 R 942 0 R 930 0 R
941 0 R 1451 0 R 938 0 R 935 0 R ]
>>
endobj
567 0 obj
<<
/Title (PETE Tutorial 2: Integrating with the Standard Template Library)
/Dest [ 148 0 R /XYZ 0 792 null ]
/SE 568 0 R
/Parent 557 0 R
/Prev 569 0 R
/Next 565 0 R
>>
endobj
568 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorial 2: Integrating with the Standard Template Library)
/K [ 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1130 0 R 1116 0 R
1117 0 R 1126 0 R 1124 0
R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R
1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R
1098 0 R 1099 0 R 1084 0 R 1069 0 R 1083 0 R 1071 0 R 1082 0 R 1450 0 R
1079 0 R 1076 0 R ]
>>
endobj
569 0 obj
<<
/Title (PETE Tutorial 1: Incorporating a Simple Vector Class)
/Dest [ 81 0 R /XYZ 0 792 null ]
/SE 570 0 R
/Parent 557 0 R
/Prev 571 0 R
/Next 567 0 R
>>
endobj
570 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorial 1: Incorporating a Simple Vector Class)
/K [ 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1283 0 R 1279 0 R 1280 0 R
1281 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1261 0 R 1243 0 R 1244 0 R
1245 0 R 1246 0 R 1258 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1256 0 R
1219 0 R 1220 0 R 1221 0 R 1222 0 R 1232 0 R 1224 0 R 1225 0 R 1231 0 R
1227 0 R 1228 0 R 1229 0 R 1230 0 R 1218 0 R 1197 0 R 1198 0 R 1199 0 R
1200 0 R 1217 0 R 1202 0 R 1215 0 R 1207 0 R 1213 0 R 1209 0 R 1212 0 R
1211 0 R 1155 0 R 1156 0 R 1195 0 R
1158 0 R 1194 0 R 1160 0 R 1161 0 R
1193 0 R 1163 0 R 1192 0 R 1165 0 R 1166 0 R 1191 0 R 1168 0 R 1190 0 R
1170 0 R 1189 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1185 0 R 1152 0 R
1153 0 R 1154 0 R 1151 0 R 1150 0 R 1148 0 R 1136 0 R 1147 0 R 1449 0 R
1144 0 R 1141 0 R ]
>>
endobj
571 0 obj
<<
/Title (PETE Tutorials: Background and Terminology)
/Dest [ 18 0 R /XYZ 0 792 null ]
/SE 572 0 R
/Parent 557 0 R
/Prev 573 0 R
/Next 569 0 R
>>
endobj
572 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials: Background and Terminology)
/K [ 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1442 0 R 1436 0 R
1441 0 R 1438 0 R 1440 0 R 1421 0 R 1434 0 R 1423 0 R 1424 0 R 1425 0 R
1426 0 R 1427 0 R 1433 0 R 1429 0 R 1432 0 R 1431 0 R 1420 0 R 1407 0 R
1419 0 R 1409 0 R 1418 0 R 1411 0 R 1417 0 R 1413 0 R 1416 0 R 1415 0 R
1399 0 R 1405 0 R 1401 0 R 1404 0 R 1403 0 R 1398 0 R 1376 0 R 1397 0 R
1378 0 R 1379 0 R 1394 0 R 1386 0 R 1387 0 R 1392 0 R 1389 0 R 1391
0 R
1343 0 R 1344 0 R 1372 0 R 1347 0 R 1348 0 R 1349 0 R 1364 0 R 1362 0 R
1342 0 R 1334 0 R 1335 0 R 1341 0 R 1337 0 R 1340 0 R 1339 0 R 1320 0 R
1332 0 R 1322 0 R 1331 0 R 1324 0 R 1325 0 R 1330 0 R 1327 0 R 1329 0 R
1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1319 0 R 1317 0 R 1318 0 R
1310 0 R 1305 0 R 1309 0 R 1307 0 R 1308 0 R 1303 0 R 1289 0 R 1302 0 R
1291 0 R 1292 0 R 1299 0 R 1296 0 R ]
>>
endobj
573 0 obj
<<
/Title (PETE Tutorials: Introduction)
/Dest [ 1 0 R /XYZ 0 792 null ]
/SE 574 0 R
/Parent 557 0 R
/Prev 558 0 R
/Next 571 0 R
>>
endobj
574 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials: Introduction)
/K [ 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R
585 0 R ]
>>
endobj
575 0 obj
<<
/Type /StructTreeRoot
/RoleMap 591 0 R
/ParentTreeNextKey 51
/ParentTree 592 0 R
/K [ 593 0 R 574 0 R 572 0 R 570 0 R 568 0 R 566 0 R 564 0 R 562 0 R 560 0 R
594 0 R ]
>>
endobj
576 0 obj
<<
/S /H1
/P 574 0 R
/P
g 1 0 R
/K 0
>>
endobj
577 0 obj
<<
/S /H1
/P 574 0 R
/Pg 1 0 R
/K 1
>>
endobj
578 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K 2
>>
endobj
579 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K 3
>>
endobj
580 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K 4
>>
endobj
581 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K 5
>>
endobj
582 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K 6
>>
endobj
583 0 obj
<<
/S /P
/P 574 0 R
/Pg 1 0 R
/K [ 7 << /Type /MCR /Pg 9 0 R /MCID 0 >> ]
>>
endobj
584 0 obj
<<
/S /Table
/P 574 0 R
/K 586 0 R
>>
endobj
585 0 obj
<<
/S /P
/P 574 0 R
/Pg 9 0 R
/K 3
>>
endobj
586 0 obj
<<
/S /TR
/P 584 0 R
/K [ 587 0 R 588 0 R ]
>>
endobj
587 0 obj
<<
/S /TD
/P 586 0 R
/K 590 0 R
>>
endobj
588 0 obj
<<
/S /TD
/P 586 0 R
/K 589 0 R
>>
endobj
589 0 obj
<<
/S /P
/P 588 0 R
/Pg 9 0 R
/K 2
>>
endobj
590 0 obj
<<
/S /P
/P 587 0 R
/Pg 9 0 R
/K 1
>>
endobj
591 0 obj
<<
/OL /L
/DIR /L
/DL /L
/MENU /L
/UL /L
/DT /LI
/DD /LI
/H1
/H
/H2 /H
/H3 /H
/H4 /H
/H5 /H
/FTable /NonStruct
/FTR /NonStruct
/FTH /NonStruct
/FTD /NonStruct
>>
endobj
592 0 obj
<<
/Nums [ 0 733 0 R 1 734 0 R 2 735 0 R 3 736 0 R 4 737 0 R 5 738 0 R 6 739 0 R
7 740 0 R 8 741 0 R 9 742 0 R 10 743 0 R 11 744 0 R 12 745 0 R 13
746 0 R 14 747 0 R 15 748 0 R 16 749 0 R 17 750 0 R 18 751 0 R 19
752 0 R 20 753 0 R 21 754 0 R 22 755 0 R 23 756 0 R 24 757 0 R 25
758 0 R 26 759 0 R 27 760 0 R 28 761 0 R 29 762 0 R 30 763 0 R 31
764 0 R 32 765 0 R 33 766 0 R 34 767 0 R 35 768 0 R 36 769 0 R 37
770 0 R 38 771 0 R 39 772 0 R 40 773 0 R 41 774 0 R 42 775 0 R 43
776 0 R 44 777 0 R 45 778 0 R 46 779 0 R 47 780 0 R 48 781 0 R 49
782 0 R 50 783 0 R ]
>>
endobj
593 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (PETE Tutorials)
/K [ 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R
728 0 R 729 0 R ]
>>
endobj
594 0 obj
<<
/S /Article
/C /SpdrArt
/P 575 0 R
/T (Portable Expression Template Engine | Main )
/K
595 0 R
>>
endobj
595 0 obj
<<
/S /FTable
/P 594 0 R
/K [ 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R ]
>>
endobj
596 0 obj
<<
/S /FTR
/P 595 0 R
/K [ 704 0 R 705 0 R ]
>>
endobj
597 0 obj
<<
/S /FTR
/P 595 0 R
/Pg 296 0 R
/K [ 10 692 0 R 12 693 0 R 14 694 0 R 695 0 R 696 0 R 697 0 R ]
>>
endobj
598 0 obj
<<
/S /FTR
/P 595 0 R
/Pg 296 0 R
/K [ 19 << /Type /MCR /Pg 370 0 R /MCID 0 >> 626 0 R 21 << /Type /MCR /Pg 370 0
R /MCID 1 >>
627 0 R 37 << /Type /MCR /Pg 370 0 R /MCID 2 >> 628 0 R 629 0 R
630 0 R 631 0 R ]
>>
endobj
599 0 obj
<<
/S /FTR
/P 595 0 R
/Pg 385 0 R
/K [ 0 613 0 R 2 614 0 R 4 615 0 R 616 0 R 617 0 R 618 0 R ]
>>
endobj
600 0 obj
<<
/S /FTR
/P 595 0 R
/Pg 385 0 R
/K [ 10 601 0 R 11 602 0 R 12 603 0 R 604 0 R 605 0 R 606 0 R ]
>>
endobj
601 0 obj
<<
/S /FTD
/P 600 0 R
/K 612 0 R
>>
endobj
602 0 obj
<<
/S /FTD
/P 600 0 R
/K 611 0 R
>>
endobj
603 0 obj
<<
/S /FTD
/P 600 0 R
/K 610 0 R
>>
endobj
604 0 obj
<<
/S /FTD
/P 600
0 R
/K 609 0 R
>>
endobj
605 0 obj
<<
/S /FTD
/P 600 0 R
/K 608 0 R
>>
endobj
606 0 obj
<<
/S /FTD
/P 600 0 R
/K 607 0 R
>>
endobj
607 0 obj
<<
/S /P
/P 606 0 R
>>
endobj
608 0 obj
<<
/S /P
/P 605 0 R
>>
endobj
609 0 obj
<<
/S /P
/P 604 0 R
>>
endobj
610 0 obj
<<
/S /P
/P 603 0 R
>>
endobj
611 0 obj
<<
/S /P
/P 602 0 R
>>
endobj
612 0 obj
<<
/S /P
/P 601 0 R
>>
endobj
613 0 obj
<<
/S /FTD
/P 599 0 R
/K 625 0 R
>>
endobj
614 0 obj
<<
/S /FTD
/P 599 0 R
/K 624 0 R
>>
endobj
615 0 obj
<<
/S /FTD
/P 599 0 R
/K 623 0 R
>>
endobj
616 0 obj
<<
/S /FTD
/P 599 0 R
/K 622 0 R
>>
endobj
617 0 obj
<<
/S /FTD
/P 599 0 R
/K [ 620 0 R 621 0 R ]
>>
endobj
618 0 obj
<<
/S /FTD
/P 599 0 R
/K 619 0 R
>>
endobj
619 0 obj
<<
/S /P
/P 618 0 R
/Pg 385 0 R
/K 9
>>
endobj
620 0 obj
<<
/S /P
/P 617 0 R
/Pg 385 0 R
/K 7
>>
endobj
621 0 obj
<<
/S /P
/P 617 0 R
/Pg 385 0 R
/K 8
>>
endobj
622 0 obj
<<
/S /P
/P 616 0 R
/Pg 38
5 0 R
/K 6
>>
endobj
623 0 obj
<<
/S /P
/P 615 0 R
/Pg 385 0 R
/K 5
>>
endobj
624 0 obj
<<
/S /P
/P 614 0 R
/Pg 385 0 R
/K 3
>>
endobj
625 0 obj
<<
/S /P
/P 613 0 R
/Pg 385 0 R
/K 1
>>
endobj
626 0 obj
<<
/S /FTD
/P 598 0 R
/K 691 0 R
>>
endobj
627 0 obj
<<
/S /FTD
/P 598 0 R
/K [ 668 0 R 669 0 R ]
>>
endobj
628 0 obj
<<
/S /FTD
/P 598 0 R
/K 667 0 R
>>
endobj
629 0 obj
<<
/S /FTD
/P 598 0 R
/K 666 0 R
>>
endobj
630 0 obj
<<
/S /FTD
/P 598 0 R
/K [ 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R
642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R
650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R
]
>>
endobj
631 0 obj
<<
/S /FTD
/P 598 0 R
/K 632 0 R
>>
endobj
632 0 obj
<<
/S /P
/P 631 0 R
/Pg 296 0 R
/K 55
>>
endobj
633 0 obj
<<
/S /H2
/P 630 0 R
/Pg 296 0 R
/K 40
>>
endobj
634 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 41
>>
endobj
635 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 42
>>
endobj
636 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 43
>>
endobj
637 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 44
>>
endobj
638 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 45
>>
endobj
639 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 46
>>
endobj
640 0 obj
<<
/S /H2
/P 630 0 R
/Pg 296 0 R
/K 47
>>
endobj
641 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 48
>>
endobj
642 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 49
>>
endobj
643 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 50
>>
endobj
644 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 51
>>
endobj
645 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 52
>>
endobj
646 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 53
>>
endobj
647 0 obj
<<
/S /P
/P 630 0 R
/Pg 296 0 R
/K 54
>>
endobj
648 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 3
>>
endobj
649 0 obj
<<
/S /Table
/P 630 0 R
/K [ 658 0 R 659 0 R 10 ]
/Pg 370 0 R
>>
endobj
650 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 11
>>
endobj
651 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 12
>>
endobj
652 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 13
>>
endobj
653 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 14
>>
endobj
654 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 15
>>
endobj
655 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 16
>>
endobj
656 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 17
>>
endobj
657 0 obj
<<
/S /P
/P 630 0 R
/Pg 370 0 R
/K 18
>>
endobj
658 0 obj
<<
/S /Caption
/P 649 0 R
/K 665 0 R
>>
endobj
659 0 obj
<<
/S /TR
/P 649 0 R
/Pg 370 0 R
/K [ 5 660 0 R 7 661 0 R ]
>>
endobj
660 0 obj
<<
/S /TD
/P 659 0 R
/K 664 0 R
>>
endobj
661 0 obj
<<
/S /TD
/P 659 0 R
/K [ 662 0 R 663 0 R ]
>>
endobj
662 0 obj
<<
/S /P
/P 661 0 R
/Pg 370 0 R
/K 8
>>
endobj
663 0 obj
<<
/S /P
/P 661 0 R
/Pg 370 0 R
/K 9
>>
endobj
664 0 obj
<<
/S /P
/P 660 0 R
/Pg 370 0 R
/K 6
>>
endobj
665 0 obj
<<
/S /P
/P 658 0 R
/Pg 370 0 R
/K 4
>>
endobj
666
0 obj
<<
/S /P
/P 629 0 R
/Pg 296 0 R
/K 39
>>
endobj
667 0 obj
<<
/S /P
/P 628 0 R
/Pg 296 0 R
/K 38
>>
endobj
668 0 obj
<<
/S /P
/P 627 0 R
/Pg 296 0 R
/K 22
>>
endobj
669 0 obj
<<
/S /UL
/P 627 0 R
/K [ 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R ]
>>
endobj
670 0 obj
<<
/S /LI
/P 669 0 R
/K [ 689 0 R 690 0 R ]
>>
endobj
671 0 obj
<<
/S /LI
/P 669 0 R
/K [ 687 0 R 688 0 R ]
>>
endobj
672 0 obj
<<
/S /LI
/P 669 0 R
/K [ 685 0 R 686 0 R ]
>>
endobj
673 0 obj
<<
/S /LI
/P 669 0 R
/K [ 683 0 R 684 0 R ]
>>
endobj
674 0 obj
<<
/S /LI
/P 669 0 R
/K [ 681 0 R 682 0 R ]
>>
endobj
675 0 obj
<<
/S /LI
/P 669 0 R
/K [ 679 0 R 680 0 R ]
>>
endobj
676 0 obj
<<
/S /LI
/P 669 0 R
/K [ 677 0 R 678 0 R ]
>>
endobj
677 0 obj
<<
/S /Label
/P 676 0 R
/Pg 296 0 R
/K 36
>>
endobj
678 0 obj
<<
/S /P
/P 676 0 R
/Pg 296 0 R
/K 35
>>
endobj
679 0 obj
<<
/S /Label
/P 675 0 R
/Pg 296 0 R
/K 34
>>
endobj
680 0 obj
<<
/S
/P
/P 675 0 R
/Pg 296 0 R
/K 33
>>
endobj
681 0 obj
<<
/S /Label
/P 674 0 R
/Pg 296 0 R
/K 32
>>
endobj
682 0 obj
<<
/S /P
/P 674 0 R
/Pg 296 0 R
/K 31
>>
endobj
683 0 obj
<<
/S /Label
/P 673 0 R
/Pg 296 0 R
/K 30
>>
endobj
684 0 obj
<<
/S /P
/P 673 0 R
/Pg 296 0 R
/K 29
>>
endobj
685 0 obj
<<
/S /Label
/P 672 0 R
/Pg 296 0 R
/K 28
>>
endobj
686 0 obj
<<
/S /P
/P 672 0 R
/Pg 296 0 R
/K 27
>>
endobj
687 0 obj
<<
/S /Label
/P 671 0 R
/Pg 296 0 R
/K 26
>>
endobj
688 0 obj
<<
/S /P
/P 671 0 R
/Pg 296 0 R
/K 25
>>
endobj
689 0 obj
<<
/S /Label
/P 670 0 R
/Pg 296 0 R
/K 24
>>
endobj
690 0 obj
<<
/S /P
/P 670 0 R
/Pg 296 0 R
/K 23
>>
endobj
691 0 obj
<<
/S /P
/P 626 0 R
/Pg 296 0 R
/K 20
>>
endobj
692 0 obj
<<
/S /FTD
/P 597 0 R
/K 703 0 R
>>
endobj
693 0 obj
<<
/S /FTD
/P 597 0 R
/K 702 0 R
>>
endobj
694 0 obj
<<
/S /FTD
/P 597 0 R
/K 701 0 R
>>
endobj
695 0 obj
<<
/S /FTD
/P 597 0 R
/K 700 0 R
>>
e
ndobj
696 0 obj
<<
/S /FTD
/P 597 0 R
/K 699 0 R
>>
endobj
697 0 obj
<<
/S /FTD
/P 597 0 R
/K 698 0 R
>>
endobj
698 0 obj
<<
/S /P
/P 697 0 R
/Pg 296 0 R
/K 18
>>
endobj
699 0 obj
<<
/S /P
/P 696 0 R
/Pg 296 0 R
/K 17
>>
endobj
700 0 obj
<<
/S /P
/P 695 0 R
/Pg 296 0 R
/K 16
>>
endobj
701 0 obj
<<
/S /P
/P 694 0 R
/Pg 296 0 R
/K 15
>>
endobj
702 0 obj
<<
/S /P
/P 693 0 R
/Pg 296 0 R
/K 13
>>
endobj
703 0 obj
<<
/S /P
/P 692 0 R
/Pg 296 0 R
/K 11
>>
endobj
704 0 obj
<<
/S /FTD
/P 596 0 R
/A 706 0 R
/K 717 0 R
>>
endobj
705 0 obj
<<
/S /FTD
/P 596 0 R
/A 706 0 R
/K 707 0 R
>>
endobj
706 0 obj
<<
/O /Adobe
/ColSpan 3
>>
endobj
707 0 obj
<<
/S /P
/P 705 0 R
/K [ 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R
]
>>
endobj
708 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 1
/Alt (advanced computing laboratory)
>>
endobj
709 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 2
/Alt (learn about
what we do)
>>
endobj
710 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 3
/Alt (explore our research projects)
>>
endobj
711 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 4
/Alt (information for acl users)
>>
endobj
712 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 5
/Alt (acl and computing related resources)
>>
endobj
713 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 6
/Alt (latest news and events)
>>
endobj
714 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 7
/Alt (find acl staff members)
>>
endobj
715 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 8
/Alt (search our web site)
>>
endobj
716 0 obj
<<
/S /Image
/P 707 0 R
/Pg 296 0 R
/K 9
/Alt (need help? look here)
>>
endobj
717 0 obj
<<
/S /P
/P 704 0 R
/K 718 0 R
>>
endobj
718 0 obj
<<
/S /Image
/P 717 0 R
/Pg 296 0 R
/K 0
/Alt (go to ACL home)
>>
endobj
719 0 obj
<<
/S /H1
/P 593 0 R
/Pg 555 0 R
/K 0
>>
endobj
720 0 obj
<<
/S /H1
/P 593 0 R
/Pg 555 0 R
/K 1
>>
endobj
721
0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 2
>>
endobj
722 0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 3
>>
endobj
723 0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 4
>>
endobj
724 0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 5
>>
endobj
725 0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 6
>>
endobj
726 0 obj
<<
/S /H2
/P 593 0 R
/Pg 555 0 R
/K 7
>>
endobj
727 0 obj
<<
/S /Quote
/P 593 0 R
/K [ 730 0 R 731 0 R 732 0 R ]
>>
endobj
728 0 obj
<<
/S /P
/P 593 0 R
>>
endobj
729 0 obj
<<
/S /P
/P 593 0 R
/Pg 555 0 R
/K 11
>>
endobj
730 0 obj
<<
/S /H3
/P 727 0 R
/Pg 555 0 R
/K 8
>>
endobj
731 0 obj
<<
/S /H3
/P 727 0 R
/Pg 555 0 R
/K 9
>>
endobj
732 0 obj
<<
/S /H3
/P 727 0 R
/Pg 555 0 R
/K 10
>>
endobj
733 0 obj
[
719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 730 0 R
731 0 R 732 0 R 729 0 R
]
endobj
734 0 obj
[
576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R
]
endobj
735 0 obj
[
583 0 R 590 0 R
589 0 R 585 0 R
]
endobj
736 0 obj
[
1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1435 0 R
]
endobj
737 0 obj
[
1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R
]
endobj
738 0 obj
[
1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R
1429 0 R 1430 0 R 1431 0 R
]
endobj
739 0 obj
[
1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R
1414 0 R 1415 0 R
]
endobj
740 0 obj
[
1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1375 0 R
]
endobj
741 0 obj
[
1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R
1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R
]
endobj
742 0 obj
[
1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R
1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R
1359 0 R 1360 0 R 1361 0 R 1362 0 R 1333 0 R
]
endobj
743 0 obj
[
1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R
]
endobj
744 0 obj
[
1320 0 R 1321 0 R 132
2 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R
1328 0 R 1311 0 R
]
endobj
745 0 obj
[
1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R
1304 0 R
]
endobj
746 0 obj
[
1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R
]
endobj
747 0 obj
[
1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R
1296 0 R
]
endobj
748 0 obj
[
1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R
1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R
1280 0 R 1281 0 R 1233 0 R
]
endobj
749 0 obj
[
1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R
1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R
1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R
]
endobj
750 0 obj
[
1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R
1227 0 R 1228 0 R 1229 0 R 1230 0 R 1196 0 R
]
endobj
751 0 obj
[
1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 120
2 0 R 1203 0 R
1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R
]
endobj
752 0 obj
[
1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R
1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R
1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R
1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R
]
endobj
753 0 obj
[
1152 0 R 1153 0 R 1154 0 R 1149 0 R
]
endobj
754 0 obj
[
1149 0 R
]
endobj
755 0 obj
[
1149 0 R 1150 0 R 1135 0 R
]
endobj
756 0 obj
[
1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R
]
endobj
757 0 obj
[
1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R
1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R
1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R
1124 0 R
]
endobj
758 0 obj
[
1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R
1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 10
98 0 R 1099 0 R 1068 0 R
]
endobj
759 0 obj
[
1068 0 R
]
endobj
760 0 obj
[
1068 0 R
]
endobj
761 0 obj
[
1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R
1076 0 R
]
endobj
762 0 obj
[
1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R
1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R
1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R
1056 0 R 1057 0 R
]
endobj
763 0 obj
[
1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R
1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 998 0 R
]
endobj
764 0 obj
[
998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R
1006 0 R 1007 0 R 1008 0 R 1009 0 R
]
endobj
765 0 obj
[
987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 971 0 R
]
endobj
766 0 obj
[
971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R
980 0 R 981 0 R 956 0 R
]
endobj
767 0 obj
[
956 0 R 957 0 R 958 0 R
959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R
965 0 R 944 0 R
]
endobj
768 0 obj
[
944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R
953 0 R 927 0 R
]
endobj
769 0 obj
[
927 0 R
]
endobj
770 0 obj
[
927 0 R
]
endobj
771 0 obj
[
927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R
]
endobj
772 0 obj
[
919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 904 0 R
]
endobj
773 0 obj
[
904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R
]
endobj
774 0 obj
[
891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R
900 0 R 901 0 R 902 0 R 883 0 R 884 0 R 885 0 R
]
endobj
775 0 obj
[
885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 876 0 R
]
endobj
776 0 obj
[
876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 874 0 R 875 0 R 825 0 R
]
endobj
777 0 obj
[
825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R
834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R
842 0 R 843 0 R 8
44 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R
850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R
]
endobj
778 0 obj
[
804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R
813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 797 0 R
]
endobj
779 0 obj
[
797 0 R 798 0 R 799 0 R 800 0 R
]
endobj
780 0 obj
[
784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R
]
endobj
781 0 obj
[
718 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R
716 0 R 597 0 R 703 0 R 597 0 R 702 0 R 597 0 R 701 0 R 700 0 R
699 0 R 698 0 R 598 0 R 691 0 R 598 0 R 668 0 R 690 0 R 689 0 R
688 0 R 687 0 R 686 0 R 685 0 R 684 0 R 683 0 R 682 0 R 681 0 R
680 0 R 679 0 R 678 0 R 677 0 R 598 0 R 667 0 R 666 0 R 633 0 R
634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R
642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 632 0 R
]
endobj
782 0 obj
[
598 0 R 598 0 R 598 0 R 648 0 R 665 0 R 659 0 R 664 0 R 659 0 R 662 0 R
663 0 R
649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R
656 0 R 657 0 R
]
endobj
783 0 obj
[
599 0 R 625 0 R 599 0 R 624 0 R 599 0 R 623 0 R 622 0 R 620 0 R 621 0 R
619 0 R 600 0 R 600 0 R 600 0 R
]
endobj
784 0 obj
<<
/S /H1
/P 560 0 R
/Pg 286 0 R
/K 0
>>
endobj
785 0 obj
<<
/S /H1
/P 560 0 R
/Pg 286 0 R
/K 1
>>
endobj
786 0 obj
<<
/S /P
/P 560 0 R
/Pg 286 0 R
/K 2
>>
endobj
787 0 obj
<<
/S /P
/P 560 0 R
/Pg 286 0 R
/K 3
>>
endobj
788 0 obj
<<
/S /P
/P 560 0 R
/Pg 286 0 R
/K 4
>>
endobj
789 0 obj
<<
/S /P
/P 560 0 R
/Pg 286 0 R
/K 5
>>
endobj
790 0 obj
<<
/S /P
/P 796 0 R
/Pg 286 0 R
/K 6
>>
endobj
791 0 obj
<<
/S /P
/P 793 0 R
/Pg 286 0 R
/K 7
>>
endobj
792 0 obj
<<
/S /P
/P 560 0 R
/Pg 286 0 R
/K 8
>>
endobj
793 0 obj
<<
/S /TD
/P 794 0 R
/K 791 0 R
>>
endobj
794 0 obj
<<
/S /TR
/P 795 0 R
/K [ 796 0 R 793 0 R ]
>>
endobj
795 0 obj
<<
/S /Table
/P 560 0 R
/K 794 0 R
>>
endobj
796 0 obj
<<
/S /TD
/P 794 0
R
/K 790 0 R
>>
endobj
797 0 obj
<<
/S /P
/P 562 0 R
/Pg 277 0 R
/K [ 15 << /Type /MCR /Pg 280 0 R /MCID 0 >> ]
>>
endobj
798 0 obj
<<
/S /P
/P 562 0 R
/Pg 280 0 R
/K 1
>>
endobj
799 0 obj
<<
/S /P
/P 801 0 R
/Pg 280 0 R
/K 2
>>
endobj
800 0 obj
<<
/S /P
/P 562 0 R
/Pg 280 0 R
/K 3
>>
endobj
801 0 obj
<<
/S /FTD
/P 802 0 R
/K 799 0 R
>>
endobj
802 0 obj
<<
/S /FTR
/P 803 0 R
/K 801 0 R
>>
endobj
803 0 obj
<<
/S /FTable
/P 562 0 R
/K 802 0 R
>>
endobj
804 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 0
>>
endobj
805 0 obj
<<
/S /P
/P 824 0 R
/Pg 277 0 R
/K 1
>>
endobj
806 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 2
>>
endobj
807 0 obj
<<
/S /P
/P 823 0 R
/Pg 277 0 R
/K 3
>>
endobj
808 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 4
>>
endobj
809 0 obj
<<
/S /P
/P 822 0 R
/Pg 277 0 R
/K 5
>>
endobj
810 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 6
>>
endobj
811 0 obj
<<
/S /P
/P 821 0 R
/Pg 277 0 R
/K 7
>>
endobj
812 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 8
>>
endobj
813 0 obj
<<
/S /P
/P 820 0 R
/Pg 277 0 R
/K 9
>>
endobj
814 0 obj
<<
/S /H3
/P 562 0 R
/Pg 277 0 R
/K 10
>>
endobj
815 0 obj
<<
/S /P
/P 819 0 R
/Pg 277 0 R
/K 11
>>
endobj
816 0 obj
<<
/S /H2
/P 562 0 R
/Pg 277 0 R
/K 12
>>
endobj
817 0 obj
<<
/S /P
/P 562 0 R
/Pg 277 0 R
/K 13
>>
endobj
818 0 obj
<<
/S /P
/P 562 0 R
/Pg 277 0 R
/K 14
>>
endobj
819 0 obj
<<
/S /Quote
/P 562 0 R
/K 815 0 R
>>
endobj
820 0 obj
<<
/S /Quote
/P 562 0 R
/K 813 0 R
>>
endobj
821 0 obj
<<
/S /Quote
/P 562 0 R
/K 811 0 R
>>
endobj
822 0 obj
<<
/S /Quote
/P 562 0 R
/K 809 0 R
>>
endobj
823 0 obj
<<
/S /Quote
/P 562 0 R
/K 807 0 R
>>
endobj
824 0 obj
<<
/S /Quote
/P 562 0 R
/K 805 0 R
>>
endobj
825 0 obj
<<
/S /P
/P 862 0 R
/Pg 268 0 R
/K [ 7 << /Type /MCR /Pg 274 0 R /MCID 0 >> ]
>>
endobj
826 0 obj
<<
/S /P
/P 862 0 R
/Pg 274 0 R
/K 1
>>
endobj
827 0 obj
<<
/S /P
/P 863 0 R
/Pg 274 0 R
/K 2
>>
endobj
828 0 obj
<<
/S /Label
/P 863 0 R
/Pg 274 0 R
/K 3
>>
endobj
829 0 obj
<<
/S /P
/P 864 0 R
/Pg 274 0 R
/K 4
>>
endobj
830 0 obj
<<
/S /Label
/P 864 0 R
/Pg 274 0 R
/K 5
>>
endobj
831 0 obj
<<
/S /P
/P 865 0 R
/Pg 274 0 R
/K 6
>>
endobj
832 0 obj
<<
/S /Label
/P 865 0 R
/Pg 274 0 R
/K 7
>>
endobj
833 0 obj
<<
/S /P
/P 866 0 R
/Pg 274 0 R
/K 8
>>
endobj
834 0 obj
<<
/S /Label
/P 866 0 R
/Pg 274 0 R
/K 9
>>
endobj
835 0 obj
<<
/S /P
/P 867 0 R
/Pg 274 0 R
/K 10
>>
endobj
836 0 obj
<<
/S /Label
/P 867 0 R
/Pg 274 0 R
/K 11
>>
endobj
837 0 obj
<<
/S /P
/P 868 0 R
/Pg 274 0 R
/K 12
>>
endobj
838 0 obj
<<
/S /Label
/P 868 0 R
/Pg 274 0 R
/K 13
>>
endobj
839 0 obj
<<
/S /P
/P 869 0 R
/Pg 274 0 R
/K 14
>>
endobj
840 0 obj
<<
/S /Label
/P 869 0 R
/Pg 274 0 R
/K 15
>>
endobj
841 0 obj
<<
/S /P
/P 870 0 R
/Pg 274 0 R
/K 16
>>
endobj
842 0 obj
<<
/S /Label
/P 87
0 0 R
/Pg 274 0 R
/K 17
>>
endobj
843 0 obj
<<
/S /P
/P 871 0 R
/Pg 274 0 R
/K 18
>>
endobj
844 0 obj
<<
/S /Label
/P 871 0 R
/Pg 274 0 R
/K 19
>>
endobj
845 0 obj
<<
/S /P
/P 872 0 R
/Pg 274 0 R
/K 20
>>
endobj
846 0 obj
<<
/S /Label
/P 872 0 R
/Pg 274 0 R
/K 21
>>
endobj
847 0 obj
<<
/S /P
/P 873 0 R
/Pg 274 0 R
/K 22
>>
endobj
848 0 obj
<<
/S /Label
/P 873 0 R
/Pg 274 0 R
/K 23
>>
endobj
849 0 obj
<<
/S /P
/P 860 0 R
/Pg 274 0 R
/K 24
>>
endobj
850 0 obj
<<
/S /Label
/P 860 0 R
/Pg 274 0 R
/K 25
>>
endobj
851 0 obj
<<
/S /H3
/P 562 0 R
/Pg 274 0 R
/K 26
>>
endobj
852 0 obj
<<
/S /P
/P 859 0 R
/Pg 274 0 R
/K 27
>>
endobj
853 0 obj
<<
/S /P
/P 859 0 R
/Pg 274 0 R
/K 28
>>
endobj
854 0 obj
<<
/S /H3
/P 562 0 R
/Pg 274 0 R
/K 29
>>
endobj
855 0 obj
<<
/S /P
/P 858 0 R
/Pg 274 0 R
/K 30
>>
endobj
856 0 obj
<<
/S /P
/P 858 0 R
/Pg 274 0 R
/K 31
>>
endobj
857 0 obj
<<
/S /P
/P 858 0 R
/Pg 274 0 R
/K 32
>>
endobj
858 0 obj
<<
/S /Quote
/P 562 0 R
/K [ 855 0 R 856 0 R 857 0 R ]
>>
endobj
859 0 obj
<<
/S /Quote
/P 562 0 R
/K [ 852 0 R 853 0 R ]
>>
endobj
860 0 obj
<<
/S /LI
/P 861 0 R
/K [ 850 0 R 849 0 R ]
>>
endobj
861 0 obj
<<
/S /UL
/P 862 0 R
/K [ 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R
872 0 R 873 0 R 860 0 R ]
>>
endobj
862 0 obj
<<
/S /Quote
/P 562 0 R
/K [ 874 0 R 875 0 R 825 0 R 826 0 R 861 0 R ]
>>
endobj
863 0 obj
<<
/S /LI
/P 861 0 R
/K [ 828 0 R 827 0 R ]
>>
endobj
864 0 obj
<<
/S /LI
/P 861 0 R
/K [ 830 0 R 829 0 R ]
>>
endobj
865 0 obj
<<
/S /LI
/P 861 0 R
/K [ 832 0 R 831 0 R ]
>>
endobj
866 0 obj
<<
/S /LI
/P 861 0 R
/K [ 834 0 R 833 0 R ]
>>
endobj
867 0 obj
<<
/S /LI
/P 861 0 R
/K [ 836 0 R 835 0 R ]
>>
endobj
868 0 obj
<<
/S /LI
/P 861 0 R
/K [ 838 0 R 837 0 R ]
>>
endobj
869 0 obj
<<
/S /LI
/P 861 0 R
/K [ 840 0 R 839 0 R ]
>>
endobj
870 0 obj
<<
/S /LI
/P 861
0 R
/K [ 842 0 R 841 0 R ]
>>
endobj
871 0 obj
<<
/S /LI
/P 861 0 R
/K [ 844 0 R 843 0 R ]
>>
endobj
872 0 obj
<<
/S /LI
/P 861 0 R
/K [ 846 0 R 845 0 R ]
>>
endobj
873 0 obj
<<
/S /LI
/P 861 0 R
/K [ 848 0 R 847 0 R ]
>>
endobj
874 0 obj
<<
/S /P
/P 862 0 R
/Pg 268 0 R
/K 5
>>
endobj
875 0 obj
<<
/S /P
/P 862 0 R
/Pg 268 0 R
/K 6
>>
endobj
876 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K [ 6 << /Type /MCR /Pg 268 0 R /MCID 0 >> ]
>>
endobj
877 0 obj
<<
/S /P
/P 882 0 R
/Pg 268 0 R
/K 1
>>
endobj
878 0 obj
<<
/S /H3
/P 562 0 R
/Pg 268 0 R
/K 2
>>
endobj
879 0 obj
<<
/S /P
/P 881 0 R
/Pg 268 0 R
/K 3
>>
endobj
880 0 obj
<<
/S /H3
/P 562 0 R
/Pg 268 0 R
/K 4
>>
endobj
881 0 obj
<<
/S /Quote
/P 562 0 R
/K 879 0 R
>>
endobj
882 0 obj
<<
/S /Quote
/P 562 0 R
/K [ 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 876 0 R
877 0 R ]
>>
endobj
883 0 obj
<<
/S /P
/P 882 0 R
/Pg 259 0 R
/K 12
>>
endobj
884
0 obj
<<
/S /P
/P 882 0 R
/Pg 259 0 R
/K 13
>>
endobj
885 0 obj
<<
/S /P
/P 882 0 R
/Pg 259 0 R
/K [ 14 << /Type /MCR /Pg 265 0 R /MCID 0 >> ]
>>
endobj
886 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K 1
>>
endobj
887 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K 2
>>
endobj
888 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K 3
>>
endobj
889 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K 4
>>
endobj
890 0 obj
<<
/S /P
/P 882 0 R
/Pg 265 0 R
/K 5
>>
endobj
891 0 obj
<<
/S /H1
/P 562 0 R
/Pg 259 0 R
/K 0
>>
endobj
892 0 obj
<<
/S /H1
/P 562 0 R
/Pg 259 0 R
/K 1
>>
endobj
893 0 obj
<<
/S /H2
/P 562 0 R
/Pg 259 0 R
/K 2
>>
endobj
894 0 obj
<<
/S /P
/P 562 0 R
/Pg 259 0 R
/K 3
>>
endobj
895 0 obj
<<
/S /H2
/P 562 0 R
/Pg 259 0 R
/K 4
>>
endobj
896 0 obj
<<
/S /P
/P 562 0 R
/Pg 259 0 R
/K 5
>>
endobj
897 0 obj
<<
/S /H2
/P 562 0 R
/Pg 259 0 R
/K 6
>>
endobj
898 0 obj
<<
/S /P
/P 562 0 R
/Pg 259 0 R
/K 7
>>
endobj
899 0 ob
j
<<
/S /P
/P 562 0 R
/Pg 259 0 R
/K 8
>>
endobj
900 0 obj
<<
/S /H3
/P 562 0 R
/Pg 259 0 R
/K 9
>>
endobj
901 0 obj
<<
/S /P
/P 903 0 R
/Pg 259 0 R
/K 10
>>
endobj
902 0 obj
<<
/S /H3
/P 562 0 R
/Pg 259 0 R
/K 11
>>
endobj
903 0 obj
<<
/S /Quote
/P 562 0 R
/K 901 0 R
>>
endobj
904 0 obj
<<
/S /P
/P 918 0 R
/Pg 247 0 R
/K [ 7 << /Type /MCR /Pg 251 0 R /MCID 0 >> ]
>>
endobj
905 0 obj
<<
/S /P
/P 564 0 R
/Pg 251 0 R
/K 1
>>
endobj
906 0 obj
<<
/S /P
/P 917 0 R
/Pg 251 0 R
/K 2
>>
endobj
907 0 obj
<<
/S /P
/P 564 0 R
/Pg 251 0 R
/K 3
>>
endobj
908 0 obj
<<
/S /P
/P 915 0 R
/Pg 251 0 R
/K 4
>>
endobj
909 0 obj
<<
/S /P
/P 916 0 R
/Pg 251 0 R
/K 5
>>
endobj
910 0 obj
<<
/S /P
/P 912 0 R
/Pg 251 0 R
/K 6
>>
endobj
911 0 obj
<<
/S /P
/P 564 0 R
/Pg 251 0 R
/K 7
>>
endobj
912 0 obj
<<
/S /TD
/P 913 0 R
/K 910 0 R
>>
endobj
913 0 obj
<<
/S /TR
/P 914 0 R
/K [ 915 0 R 916 0 R 912 0 R ]
>>
endobj
914 0 obj
<<
/S /Table
/P 564 0 R
/K 913 0 R
>>
endobj
915 0 obj
<<
/S /TD
/P 913 0 R
/K 908 0 R
>>
endobj
916 0 obj
<<
/S /TD
/P 913 0 R
/K 909 0 R
>>
endobj
917 0 obj
<<
/S /Quote
/P 564 0 R
/K 906 0 R
>>
endobj
918 0 obj
<<
/S /Quote
/P 564 0 R
/K 904 0 R
>>
endobj
919 0 obj
<<
/S /H1
/P 564 0 R
/Pg 247 0 R
/K 0
>>
endobj
920 0 obj
<<
/S /H1
/P 564 0 R
/Pg 247 0 R
/K 1
>>
endobj
921 0 obj
<<
/S /P
/P 564 0 R
/Pg 247 0 R
/K 2
>>
endobj
922 0 obj
<<
/S /P
/P 564 0 R
/Pg 247 0 R
/K 3
>>
endobj
923 0 obj
<<
/S /P
/P 926 0 R
/Pg 247 0 R
/K 4
>>
endobj
924 0 obj
<<
/S /P
/P 564 0 R
/Pg 247 0 R
/K 5
>>
endobj
925 0 obj
<<
/S /P
/P 564 0 R
/Pg 247 0 R
/K 6
>>
endobj
926 0 obj
<<
/S /Quote
/P 564 0 R
/K 923 0 R
>>
endobj
927 0 obj
<<
/S /P
/P 943 0 R
/Pg 227 0 R
/K [ 10 << /Type /MCR /Pg 233 0 R /MCID 0 >> << /Type /MCR /Pg 236 0 R /MCID 0
>>
<< /Type /MCR /Pg 239 0 R /MCID 0 >> ]
>>
endobj
928 0 obj
<<
/S /H3
/P 566 0
R
/Pg 239 0 R
/K 1
>>
endobj
929 0 obj
<<
/S /P
/P 942 0 R
/Pg 239 0 R
/K 2
>>
endobj
930 0 obj
<<
/S /H3
/P 566 0 R
/Pg 239 0 R
/K 3
>>
endobj
931 0 obj
<<
/S /P
/P 941 0 R
/Pg 239 0 R
/K 4
>>
endobj
932 0 obj
<<
/S /P
/P 939 0 R
/Pg 239 0 R
/K 5
>>
endobj
933 0 obj
<<
/S /P
/P 940 0 R
/Pg 239 0 R
/K 6
>>
endobj
934 0 obj
<<
/S /P
/P 936 0 R
/Pg 239 0 R
/K 7
>>
endobj
935 0 obj
<<
/S /P
/P 566 0 R
/Pg 239 0 R
/K 8
>>
endobj
936 0 obj
<<
/S /TD
/P 937 0 R
/K 934 0 R
>>
endobj
937 0 obj
<<
/S /TR
/P 938 0 R
/K [ 939 0 R 940 0 R 936 0 R ]
>>
endobj
938 0 obj
<<
/S /Table
/P 566 0 R
/K 937 0 R
>>
endobj
939 0 obj
<<
/S /TD
/P 937 0 R
/K 932 0 R
>>
endobj
940 0 obj
<<
/S /TD
/P 937 0 R
/K 933 0 R
>>
endobj
941 0 obj
<<
/S /Quote
/P 566 0 R
/K 931 0 R
>>
endobj
942 0 obj
<<
/S /Quote
/P 566 0 R
/K 929 0 R
>>
endobj
943 0 obj
<<
/S /Quote
/P 566 0 R
/K 927 0 R
>>
endobj
944 0 obj
<<
/S /P
/P 566 0 R
/Pg 222 0 R
/K [ 10 << /Type /MCR /Pg 227 0 R /MCID 0 >> ]
>>
endobj
945 0 obj
<<
/S /P
/P 955 0 R
/Pg 227 0 R
/K 1
>>
endobj
946 0 obj
<<
/S /P
/P 566 0 R
/Pg 227 0 R
/K 2
>>
endobj
947 0 obj
<<
/S /P
/P 566 0 R
/Pg 227 0 R
/K 3
>>
endobj
948 0 obj
<<
/S /P
/P 954 0 R
/Pg 227 0 R
/K 4
>>
endobj
949 0 obj
<<
/S /P
/P 566 0 R
/Pg 227 0 R
/K 5
>>
endobj
950 0 obj
<<
/S /H2
/P 566 0 R
/Pg 227 0 R
/K 6
>>
endobj
951 0 obj
<<
/S /P
/P 566 0 R
/Pg 227 0 R
/K 7
>>
endobj
952 0 obj
<<
/S /H2
/P 566 0 R
/Pg 227 0 R
/K 8
>>
endobj
953 0 obj
<<
/S /H3
/P 566 0 R
/Pg 227 0 R
/K 9
>>
endobj
954 0 obj
<<
/S /Quote
/P 566 0 R
/K 948 0 R
>>
endobj
955 0 obj
<<
/S /Quote
/P 566 0 R
/K 945 0 R
>>
endobj
956 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K [ 11 << /Type /MCR /Pg 222 0 R /MCID 0 >> ]
>>
endobj
957 0 obj
<<
/S /P
/P 970 0 R
/Pg 222 0 R
/K 1
>>
endobj
958 0 obj
<<
/S /P
/P 566 0 R
/Pg 222 0 R
/K 2
>>
endobj
959
0 obj
<<
/S /P
/P 969 0 R
/Pg 222 0 R
/K 3
>>
endobj
960 0 obj
<<
/S /P
/P 566 0 R
/Pg 222 0 R
/K 4
>>
endobj
961 0 obj
<<
/S /P
/P 968 0 R
/Pg 222 0 R
/K 5
>>
endobj
962 0 obj
<<
/S /P
/P 566 0 R
/Pg 222 0 R
/K 6
>>
endobj
963 0 obj
<<
/S /P
/P 967 0 R
/Pg 222 0 R
/K 7
>>
endobj
964 0 obj
<<
/S /P
/P 566 0 R
/Pg 222 0 R
/K 8
>>
endobj
965 0 obj
<<
/S /P
/P 966 0 R
/Pg 222 0 R
/K 9
>>
endobj
966 0 obj
<<
/S /Quote
/P 566 0 R
/K 965 0 R
>>
endobj
967 0 obj
<<
/S /Quote
/P 566 0 R
/K 963 0 R
>>
endobj
968 0 obj
<<
/S /Quote
/P 566 0 R
/K 961 0 R
>>
endobj
969 0 obj
<<
/S /Quote
/P 566 0 R
/K 959 0 R
>>
endobj
970 0 obj
<<
/S /Quote
/P 566 0 R
/K 957 0 R
>>
endobj
971 0 obj
<<
/S /P
/P 566 0 R
/Pg 214 0 R
/K [ 7 << /Type /MCR /Pg 219 0 R /MCID 0 >> ]
>>
endobj
972 0 obj
<<
/S /P
/P 986 0 R
/Pg 219 0 R
/K 1
>>
endobj
973 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K 2
>>
endobj
974 0 obj
<<
/S /P
/P 985 0
R
/Pg 219 0 R
/K 3
>>
endobj
975 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K 4
>>
endobj
976 0 obj
<<
/S /P
/P 984 0 R
/Pg 219 0 R
/K 5
>>
endobj
977 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K 6
>>
endobj
978 0 obj
<<
/S /P
/P 983 0 R
/Pg 219 0 R
/K 7
>>
endobj
979 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K 8
>>
endobj
980 0 obj
<<
/S /P
/P 566 0 R
/Pg 219 0 R
/K 9
>>
endobj
981 0 obj
<<
/S /P
/P 982 0 R
/Pg 219 0 R
/K 10
>>
endobj
982 0 obj
<<
/S /Quote
/P 566 0 R
/K 981 0 R
>>
endobj
983 0 obj
<<
/S /Quote
/P 566 0 R
/K 978 0 R
>>
endobj
984 0 obj
<<
/S /Quote
/P 566 0 R
/K 976 0 R
>>
endobj
985 0 obj
<<
/S /Quote
/P 566 0 R
/K 974 0 R
>>
endobj
986 0 obj
<<
/S /Quote
/P 566 0 R
/K 972 0 R
>>
endobj
987 0 obj
<<
/S /P
/P 997 0 R
/Pg 214 0 R
/K 0
>>
endobj
988 0 obj
<<
/S /P
/P 566 0 R
/Pg 214 0 R
/K 1
>>
endobj
989 0 obj
<<
/S /P
/P 996 0 R
/Pg 214 0 R
/K 2
>>
endobj
990 0 obj
<<
/S /P
/P 566 0 R
/Pg 214 0 R
/K 3
>>
endobj
991 0 obj
<<
/S /P
/P 995 0 R
/Pg 214 0 R
/K 4
>>
endobj
992 0 obj
<<
/S /P
/P 566 0 R
/Pg 214 0 R
/K 5
>>
endobj
993 0 obj
<<
/S /P
/P 994 0 R
/Pg 214 0 R
/K 6
>>
endobj
994 0 obj
<<
/S /Quote
/P 566 0 R
/K 993 0 R
>>
endobj
995 0 obj
<<
/S /Quote
/P 566 0 R
/K 991 0 R
>>
endobj
996 0 obj
<<
/S /Quote
/P 566 0 R
/K 989 0 R
>>
endobj
997 0 obj
<<
/S /Quote
/P 566 0 R
/K 987 0 R
>>
endobj
998 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K [ 14 << /Type /MCR /Pg 209 0 R /MCID 0 >> ]
>>
endobj
999 0 obj
<<
/S /P
/P 1012 0 R
/Pg 209 0 R
/K 1
>>
endobj
1000 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 2
>>
endobj
1001 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 3
>>
endobj
1002 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 4
>>
endobj
1003 0 obj
<<
/S /P
/P 1011 0 R
/Pg 209 0 R
/K 5
>>
endobj
1004 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 6
>>
endobj
1005 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/
K 7
>>
endobj
1006 0 obj
<<
/S /P
/P 1010 0 R
/Pg 209 0 R
/K 8
>>
endobj
1007 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 9
>>
endobj
1008 0 obj
<<
/S /H2
/P 566 0 R
/Pg 209 0 R
/K 10
>>
endobj
1009 0 obj
<<
/S /P
/P 566 0 R
/Pg 209 0 R
/K 11
>>
endobj
1010 0 obj
<<
/S /Quote
/P 566 0 R
/K 1006 0 R
>>
endobj
1011 0 obj
<<
/S /Quote
/P 566 0 R
/K 1003 0 R
>>
endobj
1012 0 obj
<<
/S /Quote
/P 566 0 R
/K 999 0 R
>>
endobj
1013 0 obj
<<
/S /P
/P 1031 0 R
/Pg 204 0 R
/K 0
>>
endobj
1014 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 1
>>
endobj
1015 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 2
>>
endobj
1016 0 obj
<<
/S /P
/P 1030 0 R
/Pg 204 0 R
/K 3
>>
endobj
1017 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 4
>>
endobj
1018 0 obj
<<
/S /P
/P 1029 0 R
/Pg 204 0 R
/K 5
>>
endobj
1019 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 6
>>
endobj
1020 0 obj
<<
/S /P
/P 1028 0 R
/Pg 204 0 R
/K 7
>>
endobj
1021 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 8
>>
endobj
1022 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 9
>>
endobj
1023 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 10
>>
endobj
1024 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 11
>>
endobj
1025 0 obj
<<
/S /P
/P 1027 0 R
/Pg 204 0 R
/K 12
>>
endobj
1026 0 obj
<<
/S /P
/P 566 0 R
/Pg 204 0 R
/K 13
>>
endobj
1027 0 obj
<<
/S /Quote
/P 566 0 R
/K 1025 0 R
>>
endobj
1028 0 obj
<<
/S /Quote
/P 566 0 R
/K 1020 0 R
>>
endobj
1029 0 obj
<<
/S /Quote
/P 566 0 R
/K 1018 0 R
>>
endobj
1030 0 obj
<<
/S /Quote
/P 566 0 R
/K 1016 0 R
>>
endobj
1031 0 obj
<<
/S /Quote
/P 566 0 R
/K 1013 0 R
>>
endobj
1032 0 obj
<<
/S /H1
/P 566 0 R
/Pg 187 0 R
/K 0
>>
endobj
1033 0 obj
<<
/S /H1
/P 566 0 R
/Pg 187 0 R
/K 1
>>
endobj
1034 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 2
>>
endobj
1035 0 obj
<<
/S /H2
/P 566 0 R
/Pg 187 0 R
/K 3
>>
endobj
1036 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 4
>>
en
dobj
1037 0 obj
<<
/S /P
/P 1066 0 R
/Pg 187 0 R
/K 5
>>
endobj
1038 0 obj
<<
/S /Label
/P 1066 0 R
/Pg 187 0 R
/K 6
>>
endobj
1039 0 obj
<<
/S /P
/P 1067 0 R
/Pg 187 0 R
/K 7
>>
endobj
1040 0 obj
<<
/S /Label
/P 1067 0 R
/Pg 187 0 R
/K 8
>>
endobj
1041 0 obj
<<
/S /P
/P 1064 0 R
/Pg 187 0 R
/K 9
>>
endobj
1042 0 obj
<<
/S /Label
/P 1064 0 R
/Pg 187 0 R
/K 10
>>
endobj
1043 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 11
>>
endobj
1044 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 12
>>
endobj
1045 0 obj
<<
/S /P
/P 1060 0 R
/Pg 187 0 R
/K 13
>>
endobj
1046 0 obj
<<
/S /Label
/P 1060 0 R
/Pg 187 0 R
/K 14
>>
endobj
1047 0 obj
<<
/S /P
/P 1061 0 R
/Pg 187 0 R
/K 15
>>
endobj
1048 0 obj
<<
/S /Label
/P 1061 0 R
/Pg 187 0 R
/K 16
>>
endobj
1049 0 obj
<<
/S /P
/P 1062 0 R
/Pg 187 0 R
/K 17
>>
endobj
1050 0 obj
<<
/S /Label
/P 1062 0 R
/Pg 187 0 R
/K 18
>>
endobj
1051 0 obj
<<
/S /P
/P 1063 0 R
/Pg 187 0 R
/K
19
>>
endobj
1052 0 obj
<<
/S /Label
/P 1063 0 R
/Pg 187 0 R
/K 20
>>
endobj
1053 0 obj
<<
/S /P
/P 1058 0 R
/Pg 187 0 R
/K 21
>>
endobj
1054 0 obj
<<
/S /Label
/P 1058 0 R
/Pg 187 0 R
/K 22
>>
endobj
1055 0 obj
<<
/S /H2
/P 566 0 R
/Pg 187 0 R
/K 23
>>
endobj
1056 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 24
>>
endobj
1057 0 obj
<<
/S /P
/P 566 0 R
/Pg 187 0 R
/K 25
>>
endobj
1058 0 obj
<<
/S /LI
/P 1059 0 R
/K [ 1054 0 R 1053 0 R ]
>>
endobj
1059 0 obj
<<
/S /UL
/P 566 0 R
/K [ 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1058 0 R ]
>>
endobj
1060 0 obj
<<
/S /LI
/P 1059 0 R
/K [ 1046 0 R 1045 0 R ]
>>
endobj
1061 0 obj
<<
/S /LI
/P 1059 0 R
/K [ 1048 0 R 1047 0 R ]
>>
endobj
1062 0 obj
<<
/S /LI
/P 1059 0 R
/K [ 1050 0 R 1049 0 R ]
>>
endobj
1063 0 obj
<<
/S /LI
/P 1059 0 R
/K [ 1052 0 R 1051 0 R ]
>>
endobj
1064 0 obj
<<
/S /LI
/P 1065 0 R
/K [ 1042 0 R 1041 0 R ]
>>
endobj
1065 0 obj
<<
/S /UL
/P 566 0 R
/K [ 106
6 0 R 1067 0 R 1064 0 R ]
>>
endobj
1066 0 obj
<<
/S /LI
/P 1065 0 R
/K [ 1038 0 R 1037 0 R ]
>>
endobj
1067 0 obj
<<
/S /LI
/P 1065 0 R
/K [ 1040 0 R 1039 0 R ]
>>
endobj
1068 0 obj
<<
/S /P
/P 1084 0 R
/Pg 166 0 R
/K [ 15 << /Type /MCR /Pg 173 0 R /MCID 0 >> << /Type /MCR /Pg 176 0 R /MCID 0
>>
<< /Type /MCR /Pg 179 0 R /MCID 0 >> ]
>>
endobj
1069 0 obj
<<
/S /H3
/P 568 0 R
/Pg 179 0 R
/K 1
>>
endobj
1070 0 obj
<<
/S /P
/P 1083 0 R
/Pg 179 0 R
/K 2
>>
endobj
1071 0 obj
<<
/S /H3
/P 568 0 R
/Pg 179 0 R
/K 3
>>
endobj
1072 0 obj
<<
/S /P
/P 1082 0 R
/Pg 179 0 R
/K 4
>>
endobj
1073 0 obj
<<
/S /P
/P 1080 0 R
/Pg 179 0 R
/K 5
>>
endobj
1074 0 obj
<<
/S /P
/P 1081 0 R
/Pg 179 0 R
/K 6
>>
endobj
1075 0 obj
<<
/S /P
/P 1077 0 R
/Pg 179 0 R
/K 7
>>
endobj
1076 0 obj
<<
/S /P
/P 568 0 R
/Pg 179 0 R
/K 8
>>
endobj
1077 0 obj
<<
/S /TD
/P 1078 0 R
/K 1075 0 R
>>
endobj
1078 0 obj
<<
/S /TR
/P 1079 0 R
/K [ 1080 0 R 10
81 0 R 1077 0 R ]
>>
endobj
1079 0 obj
<<
/S /Table
/P 568 0 R
/K 1078 0 R
>>
endobj
1080 0 obj
<<
/S /TD
/P 1078 0 R
/K 1073 0 R
>>
endobj
1081 0 obj
<<
/S /TD
/P 1078 0 R
/K 1074 0 R
>>
endobj
1082 0 obj
<<
/S /Quote
/P 568 0 R
/K 1072 0 R
>>
endobj
1083 0 obj
<<
/S /Quote
/P 568 0 R
/K 1070 0 R
>>
endobj
1084 0 obj
<<
/S /Quote
/P 568 0 R
/K 1068 0 R
>>
endobj
1085 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 0
>>
endobj
1086 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 1
>>
endobj
1087 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 2
>>
endobj
1088 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 3
>>
endobj
1089 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 4
>>
endobj
1090 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 5
>>
endobj
1091 0 obj
<<
/S /H2
/P 568 0 R
/Pg 166 0 R
/K 6
>>
endobj
1092 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 7
>>
endobj
1093 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 8
>>
endobj
1094 0 obj
<<
/S /H2
/P 568 0 R
/Pg 166 0 R
/K 9
>>
endobj
1095 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 10
>>
endobj
1096 0 obj
<<
/S /H2
/P 568 0 R
/Pg 166 0 R
/K 11
>>
endobj
1097 0 obj
<<
/S /P
/P 568 0 R
/Pg 166 0 R
/K 12
>>
endobj
1098 0 obj
<<
/S /H2
/P 568 0 R
/Pg 166 0 R
/K 13
>>
endobj
1099 0 obj
<<
/S /H3
/P 568 0 R
/Pg 166 0 R
/K 14
>>
endobj
1100 0 obj
<<
/S /H1
/P 568 0 R
/Pg 148 0 R
/K 0
>>
endobj
1101 0 obj
<<
/S /H1
/P 568 0 R
/Pg 148 0 R
/K 1
>>
endobj
1102 0 obj
<<
/S /P
/P 568 0 R
/Pg 148 0 R
/K 2
>>
endobj
1103 0 obj
<<
/S /H2
/P 568 0 R
/Pg 148 0 R
/K 3
>>
endobj
1104 0 obj
<<
/S /P
/P 568 0 R
/Pg 148 0 R
/K 4
>>
endobj
1105 0 obj
<<
/S /P
/P 568 0 R
/Pg 148 0 R
/K 5
>>
endobj
1106 0 obj
<<
/S /P
/P 1131 0 R
/Pg 148 0 R
/K 6
>>
endobj
1107 0 obj
<<
/S /Label
/P 1131 0 R
/Pg 148 0 R
/K 7
>>
endobj
1108 0 obj
<<
/S /P
/P 1132 0 R
/Pg 148 0 R
/K 8
>>
endobj
1109 0 obj
<<
/S /Label
/P 1132 0 R
/
Pg 148 0 R
/K 9
>>
endobj
1110 0 obj
<<
/S /P
/P 1133 0 R
/Pg 148 0 R
/K 10
>>
endobj
1111 0 obj
<<
/S /Label
/P 1133 0 R
/Pg 148 0 R
/K 11
>>
endobj
1112 0 obj
<<
/S /P
/P 1134 0 R
/Pg 148 0 R
/K 12
>>
endobj
1113 0 obj
<<
/S /Label
/P 1134 0 R
/Pg 148 0 R
/K 13
>>
endobj
1114 0 obj
<<
/S /P
/P 1129 0 R
/Pg 148 0 R
/K 14
>>
endobj
1115 0 obj
<<
/S /Label
/P 1129 0 R
/Pg 148 0 R
/K 15
>>
endobj
1116 0 obj
<<
/S /H2
/P 568 0 R
/Pg 148 0 R
/K 16
>>
endobj
1117 0 obj
<<
/S /P
/P 568 0 R
/Pg 148 0 R
/K 17
>>
endobj
1118 0 obj
<<
/S /P
/P 1127 0 R
/Pg 148 0 R
/K 18
>>
endobj
1119 0 obj
<<
/S /Label
/P 1127 0 R
/Pg 148 0 R
/K 19
>>
endobj
1120 0 obj
<<
/S /P
/P 1128 0 R
/Pg 148 0 R
/K 20
>>
endobj
1121 0 obj
<<
/S /Label
/P 1128 0 R
/Pg 148 0 R
/K 21
>>
endobj
1122 0 obj
<<
/S /P
/P 1125 0 R
/Pg 148 0 R
/K 22
>>
endobj
1123 0 obj
<<
/S /Label
/P 1125 0 R
/Pg 148 0 R
/K 23
>>
endobj
1124 0 obj
<<
/S /P
/P 568 0 R
/Pg 148 0 R
/K 24
>>
endobj
1125 0 obj
<<
/S /LI
/P 1126 0 R
/K [ 1123 0 R 1122 0 R ]
>>
endobj
1126 0 obj
<<
/S /UL
/P 568 0 R
/K [ 1127 0 R 1128 0 R 1125 0 R ]
>>
endobj
1127 0 obj
<<
/S /LI
/P 1126 0 R
/K [ 1119 0 R 1118 0 R ]
>>
endobj
1128 0 obj
<<
/S /LI
/P 1126 0 R
/K [ 1121 0 R 1120 0 R ]
>>
endobj
1129 0 obj
<<
/S /LI
/P 1130 0 R
/K [ 1115 0 R 1114 0 R ]
>>
endobj
1130 0 obj
<<
/S /UL
/P 568 0 R
/K [ 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1129 0 R ]
>>
endobj
1131 0 obj
<<
/S /LI
/P 1130 0 R
/K [ 1107 0 R 1106 0 R ]
>>
endobj
1132 0 obj
<<
/S /LI
/P 1130 0 R
/K [ 1109 0 R 1108 0 R ]
>>
endobj
1133 0 obj
<<
/S /LI
/P 1130 0 R
/K [ 1111 0 R 1110 0 R ]
>>
endobj
1134 0 obj
<<
/S /LI
/P 1130 0 R
/K [ 1113 0 R 1112 0 R ]
>>
endobj
1135 0 obj
<<
/S /P
/P 1148 0 R
/Pg 137 0 R
/K [ 2 << /Type /MCR /Pg 140 0 R /MCID 0 >> ]
>>
endobj
1136 0 obj
<<
/S /H3
/P 570 0 R
/Pg 140 0 R
/K 1
>>
endobj
1137 0 obj
<<
/S
/P
/P 1147 0 R
/Pg 140 0 R
/K 2
>>
endobj
1138 0 obj
<<
/S /P
/P 1145 0 R
/Pg 140 0 R
/K 3
>>
endobj
1139 0 obj
<<
/S /P
/P 1146 0 R
/Pg 140 0 R
/K 4
>>
endobj
1140 0 obj
<<
/S /P
/P 1142 0 R
/Pg 140 0 R
/K 5
>>
endobj
1141 0 obj
<<
/S /P
/P 570 0 R
/Pg 140 0 R
/K 6
>>
endobj
1142 0 obj
<<
/S /TD
/P 1143 0 R
/K 1140 0 R
>>
endobj
1143 0 obj
<<
/S /TR
/P 1144 0 R
/K [ 1145 0 R 1146 0 R 1142 0 R ]
>>
endobj
1144 0 obj
<<
/S /Table
/P 570 0 R
/K 1143 0 R
>>
endobj
1145 0 obj
<<
/S /TD
/P 1143 0 R
/K 1138 0 R
>>
endobj
1146 0 obj
<<
/S /TD
/P 1143 0 R
/K 1139 0 R
>>
endobj
1147 0 obj
<<
/S /Quote
/P 570 0 R
/K 1137 0 R
>>
endobj
1148 0 obj
<<
/S /Quote
/P 570 0 R
/K 1135 0 R
>>
endobj
1149 0 obj
<<
/S /P
/P 1151 0 R
/Pg 131 0 R
/K [ 3 << /Type /MCR /Pg 134 0 R /MCID 0 >> << /Type /MCR /Pg 137 0 R /MCID 0
>>
]
>>
endobj
1150 0 obj
<<
/S /H3
/P 570 0 R
/Pg 137 0 R
/K 1
>>
endobj
1151 0 obj
<<
/S /Quote
/P 570 0
R
/K 1149 0 R
>>
endobj
1152 0 obj
<<
/S /P
/P 570 0 R
/Pg 131 0 R
/K 0
>>
endobj
1153 0 obj
<<
/S /H2
/P 570 0 R
/Pg 131 0 R
/K 1
>>
endobj
1154 0 obj
<<
/S /H3
/P 570 0 R
/Pg 131 0 R
/K 2
>>
endobj
1155 0 obj
<<
/S /H2
/P 570 0 R
/Pg 122 0 R
/K 0
>>
endobj
1156 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 1
>>
endobj
1157 0 obj
<<
/S /P
/P 1195 0 R
/Pg 122 0 R
/K 2
>>
endobj
1158 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 3
>>
endobj
1159 0 obj
<<
/S /P
/P 1194 0 R
/Pg 122 0 R
/K 4
>>
endobj
1160 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 5
>>
endobj
1161 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 6
>>
endobj
1162 0 obj
<<
/S /P
/P 1193 0 R
/Pg 122 0 R
/K 7
>>
endobj
1163 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 8
>>
endobj
1164 0 obj
<<
/S /P
/P 1192 0 R
/Pg 122 0 R
/K 9
>>
endobj
1165 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 10
>>
endobj
1166 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 11
>>
endobj
1167 0 obj
<<
/S /P
/P 1191 0 R
/Pg 122 0 R
/K 12
>>
endobj
1168 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 13
>>
endobj
1169 0 obj
<<
/S /P
/P 1190 0 R
/Pg 122 0 R
/K 14
>>
endobj
1170 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 15
>>
endobj
1171 0 obj
<<
/S /P
/P 1189 0 R
/Pg 122 0 R
/K 16
>>
endobj
1172 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 17
>>
endobj
1173 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 18
>>
endobj
1174 0 obj
<<
/S /H2
/P 570 0 R
/Pg 122 0 R
/K 19
>>
endobj
1175 0 obj
<<
/S /P
/P 570 0 R
/Pg 122 0 R
/K 20
>>
endobj
1176 0 obj
<<
/S /P
/P 1186 0 R
/Pg 122 0 R
/K 21
>>
endobj
1177 0 obj
<<
/S /Label
/P 1186 0 R
/Pg 122 0 R
/K 22
>>
endobj
1178 0 obj
<<
/S /P
/P 1187 0 R
/Pg 122 0 R
/K 23
>>
endobj
1179 0 obj
<<
/S /Label
/P 1187 0 R
/Pg 122 0 R
/K 24
>>
endobj
1180 0 obj
<<
/S /P
/P 1188 0 R
/Pg 122 0 R
/K 25
>>
endobj
1181 0 obj
<<
/S /Label
/P 1188 0 R
/Pg 122 0 R
/K 26
>>
endobj
1182 0 obj
<<
/S /P
/P 1184 0 R
/Pg 122 0 R
/K 27
>>
endobj
1183 0 obj
<<
/S /Label
/P 1184 0 R
/Pg 122 0 R
/K 28
>>
endobj
1184 0 obj
<<
/S /LI
/P 1185 0 R
/K [ 1183 0 R 1182 0 R ]
>>
endobj
1185 0 obj
<<
/S /UL
/P 570 0 R
/K [ 1186 0 R 1187 0 R 1188 0 R 1184 0 R ]
>>
endobj
1186 0 obj
<<
/S /LI
/P 1185 0 R
/K [ 1177 0 R 1176 0 R ]
>>
endobj
1187 0 obj
<<
/S /LI
/P 1185 0 R
/K [ 1179 0 R 1178 0 R ]
>>
endobj
1188 0 obj
<<
/S /LI
/P 1185 0 R
/K [ 1181 0 R 1180 0 R ]
>>
endobj
1189 0 obj
<<
/S /Quote
/P 570 0 R
/K 1171 0 R
>>
endobj
1190 0 obj
<<
/S /Quote
/P 570 0 R
/K 1169 0 R
>>
endobj
1191 0 obj
<<
/S /Quote
/P 570 0 R
/K 1167 0 R
>>
endobj
1192 0 obj
<<
/S /Quote
/P 570 0 R
/K 1164 0 R
>>
endobj
1193 0 obj
<<
/S /Quote
/P 570 0 R
/K 1162 0 R
>>
endobj
1194 0 obj
<<
/S /Quote
/P 570 0 R
/K 1159 0 R
>>
endobj
1195 0 obj
<<
/S /Quote
/P 570 0 R
/K 1157 0 R
>>
endobj
1196 0 obj
<<
/S /P
/P 1218 0 R
/Pg 113 0
R
/K [ 12 << /Type /MCR /Pg 116 0 R /MCID 0 >> ]
>>
endobj
1197 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 1
>>
endobj
1198 0 obj
<<
/S /H2
/P 570 0 R
/Pg 116 0 R
/K 2
>>
endobj
1199 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 3
>>
endobj
1200 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 4
>>
endobj
1201 0 obj
<<
/S /P
/P 1217 0 R
/Pg 116 0 R
/K 5
>>
endobj
1202 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 6
>>
endobj
1203 0 obj
<<
/S /P
/P 1216 0 R
/Pg 116 0 R
/K 7
>>
endobj
1204 0 obj
<<
/S /Label
/P 1216 0 R
/Pg 116 0 R
/K 8
>>
endobj
1205 0 obj
<<
/S /P
/P 1214 0 R
/Pg 116 0 R
/K 9
>>
endobj
1206 0 obj
<<
/S /Label
/P 1214 0 R
/Pg 116 0 R
/K 10
>>
endobj
1207 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 11
>>
endobj
1208 0 obj
<<
/S /P
/P 1213 0 R
/Pg 116 0 R
/K 12
>>
endobj
1209 0 obj
<<
/S /P
/P 570 0 R
/Pg 116 0 R
/K 13
>>
endobj
1210 0 obj
<<
/S /P
/P 1212 0 R
/Pg 116 0 R
/K 14
>>
endobj
1211 0 obj
<<
/S
/P
/P 570 0 R
/Pg 116 0 R
/K 15
>>
endobj
1212 0 obj
<<
/S /Quote
/P 570 0 R
/K 1210 0 R
>>
endobj
1213 0 obj
<<
/S /Quote
/P 570 0 R
/K 1208 0 R
>>
endobj
1214 0 obj
<<
/S /LI
/P 1215 0 R
/K [ 1206 0 R 1205 0 R ]
>>
endobj
1215 0 obj
<<
/S /UL
/P 570 0 R
/K [ 1216 0 R 1214 0 R ]
>>
endobj
1216 0 obj
<<
/S /LI
/P 1215 0 R
/K [ 1204 0 R 1203 0 R ]
>>
endobj
1217 0 obj
<<
/S /Quote
/P 570 0 R
/K 1201 0 R
>>
endobj
1218 0 obj
<<
/S /Quote
/P 570 0 R
/K 1196 0 R
>>
endobj
1219 0 obj
<<
/S /H3
/P 570 0 R
/Pg 113 0 R
/K 0
>>
endobj
1220 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 1
>>
endobj
1221 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 2
>>
endobj
1222 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 3
>>
endobj
1223 0 obj
<<
/S /P
/P 1232 0 R
/Pg 113 0 R
/K 4
>>
endobj
1224 0 obj
<<
/S /H3
/P 570 0 R
/Pg 113 0 R
/K 5
>>
endobj
1225 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 6
>>
endobj
1226 0 obj
<<
/S /P
/P 1231 0 R
/Pg 113 0 R
/K 7
>>
endobj
1227 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 8
>>
endobj
1228 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 9
>>
endobj
1229 0 obj
<<
/S /H3
/P 570 0 R
/Pg 113 0 R
/K 10
>>
endobj
1230 0 obj
<<
/S /P
/P 570 0 R
/Pg 113 0 R
/K 11
>>
endobj
1231 0 obj
<<
/S /Quote
/P 570 0 R
/K 1226 0 R
>>
endobj
1232 0 obj
<<
/S /Quote
/P 570 0 R
/K 1223 0 R
>>
endobj
1233 0 obj
<<
/S /P
/P 570 0 R
/Pg 81 0 R
/K [ 18 << /Type /MCR /Pg 107 0 R /MCID 0 >> ]
>>
endobj
1234 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 1
>>
endobj
1235 0 obj
<<
/S /H2
/P 570 0 R
/Pg 107 0 R
/K 2
>>
endobj
1236 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 3
>>
endobj
1237 0 obj
<<
/S /P
/P 1262 0 R
/Pg 107 0 R
/K 4
>>
endobj
1238 0 obj
<<
/S /Label
/P 1262 0 R
/Pg 107 0 R
/K 5
>>
endobj
1239 0 obj
<<
/S /P
/P 1263 0 R
/Pg 107 0 R
/K 6
>>
endobj
1240 0 obj
<<
/S /Label
/P 1263 0 R
/Pg 107 0 R
/K 7
>>
endobj
1241 0 obj
<<
/
S /P
/P 1260 0 R
/Pg 107 0 R
/K 8
>>
endobj
1242 0 obj
<<
/S /Label
/P 1260 0 R
/Pg 107 0 R
/K 9
>>
endobj
1243 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 10
>>
endobj
1244 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 11
>>
endobj
1245 0 obj
<<
/S /H3
/P 570 0 R
/Pg 107 0 R
/K 12
>>
endobj
1246 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 13
>>
endobj
1247 0 obj
<<
/S /P
/P 1259 0 R
/Pg 107 0 R
/K 14
>>
endobj
1248 0 obj
<<
/S /Label
/P 1259 0 R
/Pg 107 0 R
/K 15
>>
endobj
1249 0 obj
<<
/S /P
/P 1257 0 R
/Pg 107 0 R
/K 16
>>
endobj
1250 0 obj
<<
/S /Label
/P 1257 0 R
/Pg 107 0 R
/K 17
>>
endobj
1251 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 18
>>
endobj
1252 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 19
>>
endobj
1253 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 20
>>
endobj
1254 0 obj
<<
/S /P
/P 570 0 R
/Pg 107 0 R
/K 21
>>
endobj
1255 0 obj
<<
/S /P
/P 1256 0 R
/Pg 107 0 R
/K 22
>>
endobj
1256 0 obj
<<
/S /Q
uote
/P 570 0 R
/K 1255 0 R
>>
endobj
1257 0 obj
<<
/S /LI
/P 1258 0 R
/K [ 1250 0 R 1249 0 R ]
>>
endobj
1258 0 obj
<<
/S /OL
/P 570 0 R
/K [ 1259 0 R 1257 0 R ]
>>
endobj
1259 0 obj
<<
/S /LI
/P 1258 0 R
/K [ 1248 0 R 1247 0 R ]
>>
endobj
1260 0 obj
<<
/S /LI
/P 1261 0 R
/K [ 1242 0 R 1241 0 R ]
>>
endobj
1261 0 obj
<<
/S /OL
/P 570 0 R
/K [ 1262 0 R 1263 0 R 1260 0 R ]
>>
endobj
1262 0 obj
<<
/S /LI
/P 1261 0 R
/K [ 1238 0 R 1237 0 R ]
>>
endobj
1263 0 obj
<<
/S /LI
/P 1261 0 R
/K [ 1240 0 R 1239 0 R ]
>>
endobj
1264 0 obj
<<
/S /H1
/P 570 0 R
/Pg 81 0 R
/K 0
>>
endobj
1265 0 obj
<<
/S /H1
/P 570 0 R
/Pg 81 0 R
/K 1
>>
endobj
1266 0 obj
<<
/S /P
/P 570 0 R
/Pg 81 0 R
/K 2
>>
endobj
1267 0 obj
<<
/S /H2
/P 570 0 R
/Pg 81 0 R
/K 3
>>
endobj
1268 0 obj
<<
/S /P
/P 570 0 R
/Pg 81 0 R
/K 4
>>
endobj
1269 0 obj
<<
/S /P
/P 1284 0 R
/Pg 81 0 R
/K 5
>>
endobj
1270 0 obj
<<
/S /Label
/P 1284 0 R
/Pg 81 0 R
/K 6
>>
endobj
1271 0 obj
<<
/S /P
/P 1285 0 R
/Pg 81 0 R
/K 7
>>
endobj
1272 0 obj
<<
/S /Label
/P 1285 0 R
/Pg 81 0 R
/K 8
>>
endobj
1273 0 obj
<<
/S /P
/P 1286 0 R
/Pg 81 0 R
/K 9
>>
endobj
1274 0 obj
<<
/S /Label
/P 1286 0 R
/Pg 81 0 R
/K 10
>>
endobj
1275 0 obj
<<
/S /P
/P 1287 0 R
/Pg 81 0 R
/K 11
>>
endobj
1276 0 obj
<<
/S /Label
/P 1287 0 R
/Pg 81 0 R
/K 12
>>
endobj
1277 0 obj
<<
/S /P
/P 1282 0 R
/Pg 81 0 R
/K 13
>>
endobj
1278 0 obj
<<
/S /Label
/P 1282 0 R
/Pg 81 0 R
/K 14
>>
endobj
1279 0 obj
<<
/S /H2
/P 570 0 R
/Pg 81 0 R
/K 15
>>
endobj
1280 0 obj
<<
/S /P
/P 570 0 R
/Pg 81 0 R
/K 16
>>
endobj
1281 0 obj
<<
/S /P
/P 570 0 R
/Pg 81 0 R
/K 17
>>
endobj
1282 0 obj
<<
/S /LI
/P 1283 0 R
/K [ 1278 0 R 1277 0 R ]
>>
endobj
1283 0 obj
<<
/S /UL
/P 570 0 R
/K [ 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1282 0 R ]
>>
endobj
1284 0 obj
<<
/S /LI
/P 1283 0 R
/K [ 1270 0 R 1269 0 R ]
>>
endobj
1285 0 obj
<<
/S /LI
/P 1283 0 R
/K [ 1272 0 R 1271 0 R ]
>>
endobj
1286 0 obj
<<
/S /LI
/P 1283 0 R
/K [ 1274 0 R 1273 0 R ]
>>
endobj
1287 0 obj
<<
/S /LI
/P 1283 0 R
/K [ 1276 0 R 1275 0 R ]
>>
endobj
1288 0 obj
<<
/S /P
/P 1303 0 R
/Pg 71 0 R
/K 0
>>
endobj
1289 0 obj
<<
/S /P
/P 572 0 R
/Pg 71 0 R
/K 1
>>
endobj
1290 0 obj
<<
/S /P
/P 1302 0 R
/Pg 71 0 R
/K 2
>>
endobj
1291 0 obj
<<
/S /P
/P 572 0 R
/Pg 71 0 R
/K 3
>>
endobj
1292 0 obj
<<
/S /P
/P 572 0 R
/Pg 71 0 R
/K 4
>>
endobj
1293 0 obj
<<
/S /P
/P 1300 0 R
/Pg 71 0 R
/K 5
>>
endobj
1294 0 obj
<<
/S /P
/P 1301 0 R
/Pg 71 0 R
/K 6
>>
endobj
1295 0 obj
<<
/S /P
/P 1297 0 R
/Pg 71 0 R
/K 7
>>
endobj
1296 0 obj
<<
/S /P
/P 572 0 R
/Pg 71 0 R
/K 8
>>
endobj
1297 0 obj
<<
/S /TD
/P 1298 0 R
/K 1295 0 R
>>
endobj
1298 0 obj
<<
/S /TR
/P 1299 0 R
/K [ 1300 0 R 1301 0 R 1297 0 R ]
>>
endobj
1299 0 obj
<<
/S /Table
/P 572 0 R
/K 1298 0 R
>>
endobj
1300 0 obj
<<
/S /TD
/P 1298 0 R
/K 1293 0 R
>>
endobj
1301 0 obj
<<
/S /TD
/P 1298 0 R
/K 1294 0 R
>>
endobj
1302 0 obj
<<
/S /Quote
/P 572 0 R
/K 1290 0 R
>>
endobj
1303 0 obj
<<
/S /Quote
/P 572 0 R
/K 1288 0 R
>>
endobj
1304 0 obj
<<
/S /P
/P 1310 0 R
/Pg 65 0 R
/K [ 8 << /Type /MCR /Pg 68 0 R /MCID 0 >> ]
>>
endobj
1305 0 obj
<<
/S /P
/P 572 0 R
/Pg 68 0 R
/K 1
>>
endobj
1306 0 obj
<<
/S /P
/P 1309 0 R
/Pg 68 0 R
/K 2
>>
endobj
1307 0 obj
<<
/S /P
/P 572 0 R
/Pg 68 0 R
/K 3
>>
endobj
1308 0 obj
<<
/S /P
/P 572 0 R
/Pg 68 0 R
/K 4
>>
endobj
1309 0 obj
<<
/S /Quote
/P 572 0 R
/K 1306 0 R
>>
endobj
1310 0 obj
<<
/S /Quote
/P 572 0 R
/K 1304 0 R
>>
endobj
1311 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K [ 9 << /Type /MCR /Pg 65 0 R /MCID 0 >> ]
>>
endobj
1312 0 obj
<<
/S /H2
/P 572 0 R
/Pg 65 0 R
/K 1
>>
endobj
1313 0 obj
<<
/S /P
/P 572 0 R
/Pg 65 0 R
/K 2
>>
endobj
1314 0 obj
<<
/S /P
/P 572 0 R
/Pg 65 0 R
/K 3
>>
e
ndobj
1315 0 obj
<<
/S /P
/P 572 0 R
/Pg 65 0 R
/K 4
>>
endobj
1316 0 obj
<<
/S /P
/P 1319 0 R
/Pg 65 0 R
/K 5
>>
endobj
1317 0 obj
<<
/S /P
/P 572 0 R
/Pg 65 0 R
/K 6
>>
endobj
1318 0 obj
<<
/S /P
/P 572 0 R
/Pg 65 0 R
/K 7
>>
endobj
1319 0 obj
<<
/S /Quote
/P 572 0 R
/K 1316 0 R
>>
endobj
1320 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K 0
>>
endobj
1321 0 obj
<<
/S /P
/P 1332 0 R
/Pg 60 0 R
/K 1
>>
endobj
1322 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K 2
>>
endobj
1323 0 obj
<<
/S /P
/P 1331 0 R
/Pg 60 0 R
/K 3
>>
endobj
1324 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K 4
>>
endobj
1325 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K 5
>>
endobj
1326 0 obj
<<
/S /P
/P 1330 0 R
/Pg 60 0 R
/K 6
>>
endobj
1327 0 obj
<<
/S /P
/P 572 0 R
/Pg 60 0 R
/K 7
>>
endobj
1328 0 obj
<<
/S /P
/P 1329 0 R
/Pg 60 0 R
/K 8
>>
endobj
1329 0 obj
<<
/S /Quote
/P 572 0 R
/K 1328 0 R
>>
endobj
1330 0 obj
<<
/S /Quote
/P 572 0 R
/K 13
26 0 R
>>
endobj
1331 0 obj
<<
/S /Quote
/P 572 0 R
/K 1323 0 R
>>
endobj
1332 0 obj
<<
/S /Quote
/P 572 0 R
/K 1321 0 R
>>
endobj
1333 0 obj
<<
/S /P
/P 1342 0 R
/Pg 45 0 R
/K [ 20 << /Type /MCR /Pg 57 0 R /MCID 0 >> ]
>>
endobj
1334 0 obj
<<
/S /P
/P 572 0 R
/Pg 57 0 R
/K 1
>>
endobj
1335 0 obj
<<
/S /P
/P 572 0 R
/Pg 57 0 R
/K 2
>>
endobj
1336 0 obj
<<
/S /P
/P 1341 0 R
/Pg 57 0 R
/K 3
>>
endobj
1337 0 obj
<<
/S /P
/P 572 0 R
/Pg 57 0 R
/K 4
>>
endobj
1338 0 obj
<<
/S /P
/P 1340 0 R
/Pg 57 0 R
/K 5
>>
endobj
1339 0 obj
<<
/S /P
/P 572 0 R
/Pg 57 0 R
/K 6
>>
endobj
1340 0 obj
<<
/S /Quote
/P 572 0 R
/K 1338 0 R
>>
endobj
1341 0 obj
<<
/S /Quote
/P 572 0 R
/K 1336 0 R
>>
endobj
1342 0 obj
<<
/S /Quote
/P 572 0 R
/K 1333 0 R
>>
endobj
1343 0 obj
<<
/S /H2
/P 572 0 R
/Pg 45 0 R
/K 0
>>
endobj
1344 0 obj
<<
/S /P
/P 572 0 R
/Pg 45 0 R
/K 1
>>
endobj
1345 0 obj
<<
/S /P
/P 1374 0 R
/Pg 45 0 R
/K 2
>>
endobj
1346 0 obj
<<
/S /P
/P 1370 0 R
/Pg 45 0 R
/K 3
>>
endobj
1347 0 obj
<<
/S /P
/P 572 0 R
/Pg 45 0 R
/K 4
>>
endobj
1348 0 obj
<<
/S /P
/P 572 0 R
/Pg 45 0 R
/K 5
>>
endobj
1349 0 obj
<<
/S /P
/P 572 0 R
/Pg 45 0 R
/K 6
>>
endobj
1350 0 obj
<<
/S /P
/P 1365 0 R
/Pg 45 0 R
/K 7
>>
endobj
1351 0 obj
<<
/S /Label
/P 1365 0 R
/Pg 45 0 R
/K 8
>>
endobj
1352 0 obj
<<
/S /P
/P 1366 0 R
/Pg 45 0 R
/K 9
>>
endobj
1353 0 obj
<<
/S /Label
/P 1366 0 R
/Pg 45 0 R
/K 10
>>
endobj
1354 0 obj
<<
/S /P
/P 1367 0 R
/Pg 45 0 R
/K 11
>>
endobj
1355 0 obj
<<
/S /Label
/P 1367 0 R
/Pg 45 0 R
/K 12
>>
endobj
1356 0 obj
<<
/S /P
/P 1368 0 R
/Pg 45 0 R
/K 13
>>
endobj
1357 0 obj
<<
/S /Label
/P 1368 0 R
/Pg 45 0 R
/K 14
>>
endobj
1358 0 obj
<<
/S /P
/P 1369 0 R
/Pg 45 0 R
/K 15
>>
endobj
1359 0 obj
<<
/S /Label
/P 1369 0 R
/Pg 45 0 R
/K 16
>>
endobj
1360 0 obj
<<
/S /P
/P 1363 0 R
/Pg 45 0 R
/K 17
>>
endobj
1361
0 obj
<<
/S /Label
/P 1363 0 R
/Pg 45 0 R
/K 18
>>
endobj
1362 0 obj
<<
/S /P
/P 572 0 R
/Pg 45 0 R
/K 19
>>
endobj
1363 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1361 0 R 1360 0 R ]
>>
endobj
1364 0 obj
<<
/S /UL
/P 572 0 R
/K [ 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R 1363 0 R ]
>>
endobj
1365 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1351 0 R 1350 0 R ]
>>
endobj
1366 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1353 0 R 1352 0 R ]
>>
endobj
1367 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1355 0 R 1354 0 R ]
>>
endobj
1368 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1357 0 R 1356 0 R ]
>>
endobj
1369 0 obj
<<
/S /LI
/P 1364 0 R
/K [ 1359 0 R 1358 0 R ]
>>
endobj
1370 0 obj
<<
/S /TD
/P 1371 0 R
/K 1346 0 R
>>
endobj
1371 0 obj
<<
/S /TR
/P 1372 0 R
/K 1370 0 R
>>
endobj
1372 0 obj
<<
/S /Table
/P 572 0 R
/K [ 1373 0 R 1371 0 R ]
>>
endobj
1373 0 obj
<<
/S /TR
/P 1372 0 R
/K 1374 0 R
>>
endobj
1374 0 obj
<<
/S /TD
/P 1373 0 R
/K 1345 0 R
>>
endobj
1375 0
obj
<<
/S /P
/P 1398 0 R
/Pg 39 0 R
/K [ 5 << /Type /MCR /Pg 42 0 R /MCID 0 >> ]
>>
endobj
1376 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 1
>>
endobj
1377 0 obj
<<
/S /P
/P 1397 0 R
/Pg 42 0 R
/K 2
>>
endobj
1378 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 3
>>
endobj
1379 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 4
>>
endobj
1380 0 obj
<<
/S /P
/P 1395 0 R
/Pg 42 0 R
/K 5
>>
endobj
1381 0 obj
<<
/S /Label
/P 1395 0 R
/Pg 42 0 R
/K 6
>>
endobj
1382 0 obj
<<
/S /P
/P 1396 0 R
/Pg 42 0 R
/K 7
>>
endobj
1383 0 obj
<<
/S /Label
/P 1396 0 R
/Pg 42 0 R
/K 8
>>
endobj
1384 0 obj
<<
/S /P
/P 1393 0 R
/Pg 42 0 R
/K 9
>>
endobj
1385 0 obj
<<
/S /Label
/P 1393 0 R
/Pg 42 0 R
/K 10
>>
endobj
1386 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 11
>>
endobj
1387 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 12
>>
endobj
1388 0 obj
<<
/S /P
/P 1392 0 R
/Pg 42 0 R
/K 13
>>
endobj
1389 0 obj
<<
/S /P
/P 572 0 R
/Pg 42 0 R
/K 14
>>
endobj
1390 0 obj
<<
/S /P
/P 1391 0 R
/Pg 42 0 R
/K 15
>>
endobj
1391 0 obj
<<
/S /Quote
/P 572 0 R
/K 1390 0 R
>>
endobj
1392 0 obj
<<
/S /Quote
/P 572 0 R
/K 1388 0 R
>>
endobj
1393 0 obj
<<
/S /LI
/P 1394 0 R
/K [ 1385 0 R 1384 0 R ]
>>
endobj
1394 0 obj
<<
/S /OL
/P 572 0 R
/K [ 1395 0 R 1396 0 R 1393 0 R ]
>>
endobj
1395 0 obj
<<
/S /LI
/P 1394 0 R
/K [ 1381 0 R 1380 0 R ]
>>
endobj
1396 0 obj
<<
/S /LI
/P 1394 0 R
/K [ 1383 0 R 1382 0 R ]
>>
endobj
1397 0 obj
<<
/S /Quote
/P 572 0 R
/K 1377 0 R
>>
endobj
1398 0 obj
<<
/S /Quote
/P 572 0 R
/K 1375 0 R
>>
endobj
1399 0 obj
<<
/S /P
/P 572 0 R
/Pg 39 0 R
/K 0
>>
endobj
1400 0 obj
<<
/S /P
/P 1405 0 R
/Pg 39 0 R
/K 1
>>
endobj
1401 0 obj
<<
/S /P
/P 572 0 R
/Pg 39 0 R
/K 2
>>
endobj
1402 0 obj
<<
/S /P
/P 1404 0 R
/Pg 39 0 R
/K 3
>>
endobj
1403 0 obj
<<
/S /P
/P 572 0 R
/Pg 39 0 R
/K 4
>>
endobj
1404 0 obj
<<
/S /Quote
/P 572 0 R
/K 1402 0 R
>>
endob
j
1405 0 obj
<<
/S /Quote
/P 572 0 R
/K 1400 0 R
>>
endobj
1406 0 obj
<<
/S /P
/P 1420 0 R
/Pg 36 0 R
/K 0
>>
endobj
1407 0 obj
<<
/S /P
/P 572 0 R
/Pg 36 0 R
/K 1
>>
endobj
1408 0 obj
<<
/S /P
/P 1419 0 R
/Pg 36 0 R
/K 2
>>
endobj
1409 0 obj
<<
/S /P
/P 572 0 R
/Pg 36 0 R
/K 3
>>
endobj
1410 0 obj
<<
/S /P
/P 1418 0 R
/Pg 36 0 R
/K 4
>>
endobj
1411 0 obj
<<
/S /P
/P 572 0 R
/Pg 36 0 R
/K 5
>>
endobj
1412 0 obj
<<
/S /P
/P 1417 0 R
/Pg 36 0 R
/K 6
>>
endobj
1413 0 obj
<<
/S /P
/P 572 0 R
/Pg 36 0 R
/K 7
>>
endobj
1414 0 obj
<<
/S /P
/P 1416 0 R
/Pg 36 0 R
/K 8
>>
endobj
1415 0 obj
<<
/S /P
/P 572 0 R
/Pg 36 0 R
/K 9
>>
endobj
1416 0 obj
<<
/S /Quote
/P 572 0 R
/K 1414 0 R
>>
endobj
1417 0 obj
<<
/S /Quote
/P 572 0 R
/K 1412 0 R
>>
endobj
1418 0 obj
<<
/S /Quote
/P 572 0 R
/K 1410 0 R
>>
endobj
1419 0 obj
<<
/S /Quote
/P 572 0 R
/K 1408 0 R
>>
endobj
1420 0 obj
<<
/S /Quote
/P 572 0 R
/K 1406 0 R
>>
endobj
1421 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 0
>>
endobj
1422 0 obj
<<
/S /P
/P 1434 0 R
/Pg 30 0 R
/K 1
>>
endobj
1423 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 2
>>
endobj
1424 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 3
>>
endobj
1425 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 4
>>
endobj
1426 0 obj
<<
/S /H2
/P 572 0 R
/Pg 30 0 R
/K 5
>>
endobj
1427 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 6
>>
endobj
1428 0 obj
<<
/S /P
/P 1433 0 R
/Pg 30 0 R
/K 7
>>
endobj
1429 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 8
>>
endobj
1430 0 obj
<<
/S /P
/P 1432 0 R
/Pg 30 0 R
/K 9
>>
endobj
1431 0 obj
<<
/S /P
/P 572 0 R
/Pg 30 0 R
/K 10
>>
endobj
1432 0 obj
<<
/S /Quote
/P 572 0 R
/K 1430 0 R
>>
endobj
1433 0 obj
<<
/S /Quote
/P 572 0 R
/K 1428 0 R
>>
endobj
1434 0 obj
<<
/S /Quote
/P 572 0 R
/K 1422 0 R
>>
endobj
1435 0 obj
<<
/S /P
/P 1442 0 R
/Pg 18 0 R
/K [ 6 << /Type /MCR /Pg 27 0 R /MCID 0 >> ]
>>
endo
bj
1436 0 obj
<<
/S /P
/P 572 0 R
/Pg 27 0 R
/K 1
>>
endobj
1437 0 obj
<<
/S /P
/P 1441 0 R
/Pg 27 0 R
/K 2
>>
endobj
1438 0 obj
<<
/S /P
/P 572 0 R
/Pg 27 0 R
/K 3
>>
endobj
1439 0 obj
<<
/S /P
/P 1440 0 R
/Pg 27 0 R
/K 4
>>
endobj
1440 0 obj
<<
/S /Quote
/P 572 0 R
/K 1439 0 R
>>
endobj
1441 0 obj
<<
/S /Quote
/P 572 0 R
/K 1437 0 R
>>
endobj
1442 0 obj
<<
/S /Quote
/P 572 0 R
/K 1435 0 R
>>
endobj
1443 0 obj
<<
/S /H1
/P 572 0 R
/Pg 18 0 R
/K 0
>>
endobj
1444 0 obj
<<
/S /H1
/P 572 0 R
/Pg 18 0 R
/K 1
>>
endobj
1445 0 obj
<<
/S /P
/P 572 0 R
/Pg 18 0 R
/K 2
>>
endobj
1446 0 obj
<<
/S /H2
/P 572 0 R
/Pg 18 0 R
/K 3
>>
endobj
1447 0 obj
<<
/S /P
/P 572 0 R
/Pg 18 0 R
/K 4
>>
endobj
1448 0 obj
<<
/S /P
/P 572 0 R
/Pg 18 0 R
/K 5
>>
endobj
1449 0 obj
<<
/S /P
/P 570 0 R
>>
endobj
1450 0 obj
<<
/S /P
/P 568 0 R
>>
endobj
1451 0 obj
<<
/S /P
/P 566 0 R
>>
endobj
1452 0 obj
<<
/S /P
/P 562 0 R
>>
endobj
1453 0 obj
[
1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R
1462 0 R 1463 0 R
]
endobj
1454 0 obj
<<
/Subtype /Link
/Rect [ 50 539.00391 189.99036 564 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 1 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/introduction.html)>>
>>
endobj
1455 0 obj
<<
/Subtype /Link
/Rect [ 50 495.00391 390.05286 520 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>>
>>
endobj
1456 0 obj
<<
/Subtype /Link
/Rect [ 50 451.00391 462.12463 476 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>>
>>
endobj
1457 0 obj
<<
/Subtype /Link
/Rect [ 50 407.00391 494.06812 432 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI (http://ww
w-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>>
>>
endobj
1458 0 obj
<<
/Subtype /Link
/Rect [ 50 378.00391 131.35925 403 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>>
>>
endobj
1459 0 obj
<<
/Subtype /Link
/Rect [ 50 334.00391 274.0625 359 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 187 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html)>>
>>
endobj
1460 0 obj
<<
/Subtype /Link
/Rect [ 86 254.00391 351.06577 273 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 247 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)>>
>>
endobj
1461 0 obj
<<
/Subtype /Link
/Rect [ 86 218.00391 306.06659 237 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 259 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/makeoperators.html)>>
>>
en
dobj
1462 0 obj
<<
/Subtype /Link
/Rect [ 86 182.00391 193.02716 201 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 286 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)>>
>>
endobj
1463 0 obj
<<
/Subtype /Link
/Rect [ 160.2748 114.00391 451.7252 129 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>>
>>
endobj
1464 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Helvetica-Bold
/Encoding /WinAnsiEncoding
>>
endobj
1465 0 obj
<< /Filter /FlateDecode /Length 1466 0 R >>
stream
+H��T�n�0���<B%���UU��(څB#x(�Ԥ��𦬖��I�٤U��jG���3g<�fGG�jqq����lA~��B�g����t �Rp���
%$�% /J��&���jA��
�� ��N��C$��
+��ݢ.j����y
+>'�K���|Ǐ���m��"�Ľ6C��I
II�]�'�ܵd����9OvR� �Rz����e
+6��0��7p���
�.9��iC�+�Ր�r�׆K�SF���]T��o��6��yebP�[��R�҈�1�#}�E��ujӟ����x%Ηy��f�yf9e���,�j��1�(�f�־�=�����U^6���.Ţ����'�M%�x/�Ȁ*��ج&��M��B{��E#��@A�u;�Y�z__�yFF��96��ȶ̿y��UM�B4<������t���V��:��e�l����\�=��F��'M㪛<}'8=���
Z�d �b��ăAU�������?k�w��
+&z�d�,0��^��tXL�UP�*�$�S�|e�w��cR�5����fn���
-�|�ey���-��H�t�-�mݢ�S��=�~R�@��p�h�F�+�,��
+�=�c;�𥾟����� �X�^ɢn�>�n[��#�z
'�-qyk��2��[��f���}�7���
7=�錊5}b�kp�A�����m�6�a��l^���u6-��VE�տÿk�u]bۇ�k]�܄] �>Ķ�\}�Lv��` �S
endstream
endobj
1466 0 obj
768
endobj
1467 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Times-Italic
/Encoding /WinAnsiEncoding
>>
endobj
1468 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
>>
endobj
1469 0 obj
<< /Type /XObject /Subtype /Image /Width 432 /Height 108 /BitsPerComponent 8
/ColorSpace 1474 0 R /Filter /FlateDecode /Length 1473 0 R /ID 1472 0 R >>
stream
+H��Wmv�
+�ov�d�{��[@
��3��XyϷGBT�������Z�m?������P/)�*3��?��1K���)]FGӨpڥ1#��uߥ�%o�rJ����^��N� �4�k�Qi��d9E�-KV>E��z�����>ࣼ
+b%v(2�{�t���-蓱#���D`�)\��z� ��y���)?�zu�L�
+a��1�72qRBY�(iT��JG�I�l3�U��5�+-%�u�M�#�W�$�VŶN��\��{�z��@�a������+�zq/�0��E��JN��%��O��Nu�j>���%�Ke
j(�ǿ��KB�j+�T��-�_�4³^1�����W��6 7��o)١�q�����z�Q�I�f�T�5Ԫ&��H��
\����)����Cw�_�L�g=���X�;1�&�^�2��
�`4#μ��)�8k-�D,��]_�j��|�^�����k�JzV]V�W�����ڌe���v8on����r�7"���>��,�i(���Iu4�{�n����?���Ќ�c}����Q/x��CY`3��2��T�⡯��^i�@"٨�
+l����b�����E����G�40JA�����~�������k�At<����;2�&
�I�"�,h|���o�b���?����z.j�f}1�nC;N^���
�#�z:�_k8*`�}�����`�!__��.I���E8C�4�^
�ӫQ�j0���t&z�j�L0fʣ�쥣����R���(�)a��z
Qb�S�&�2�+��kYk^B:��Pz�N���L]3G�J��
e��`u�p�q0B�MDQ���Pp�)J:�,;7�`���}��@op���
��q�֔�V:�д|�|��u���W���Qhui��s��и@X�L�'�M���r>Km��d|O�]�J�.���k=�*庌g����sr]���6�mQ�?�3�me��-��ko�k��%?��^�����=z����z�]0֫����s`�7�$��I�$�KgoT��ܟ
-R����G�����?Z��C�/�����WK<������0-�U�*o���Wᦲ)sK3�^�,����x��_��O�
�WM��A�˩�?@�����R/tI��� :��m�\�X����E�3�f�'�
+�S�Zgx=-��x�z��
+���e�0���W�����^%=r�e�E8p
������
�S)E\7��,���`��WN�%Q�Q�pi�\h�5�Pj��V@i�� ���Bb#z����o��ۯ
/A�U<%G�+��j�\X�XR��t�LP/�<����+x�����=�K��*r����&�t�^�M��~~�&�W%^k�0i}�|�q�M�n�{��EK\��w��P�4<\������
R�q�ԏ֦�/���e�5W#<���^Ϸ���v�8�I=�-�W�ȵV�u�ob�m!�-���K�)OS�^����J���'�"^m���U�ˊ{�
�����'mm)�g������by��z�E�/�k1�)?�\�Y�۾�Fo|��fz�
%�q�l�x������nwi�UwW�f��HWnHM��(�e,X�U��%~
+�+��@bo��`Wj��4dO�>���s돟+��:B��K��`zI&����ÓE�Y�^��8QܦO�G��
EͿ��D�q��HkA/Gi���n��[,��(T�&�
��1k��4p��?�v6���6�8�D���3GM�]�Kt�NKza
+�zY,�0,o*$�/����H�ԫب��C�̏4^_n�+2�P� �� �YX�K�Z�ѫD�[d���V�O
`�d��М�W�;LӒ���
�5�?�G7/��tĸ�#� ϯ�B��%��(|��X�������:�)T��2�����izx�
�~���]��þJ0GG����V����"J�+�`,���f��xC��v3D���������fi6iO�%�ʀpl/�����h�W��x
�*�k��֦�ޒXm��fT-d�f<�:��%{r��zE[J`M�bƍ�Vf�F���v�굔T8�F<_�כ��R�V������]r�z���n��\�&�(xI��)��;'ܻ^YnWzIu��=�g�/vƨ���K�p�Z
�\~�L�*\z�B�V�>s��Lr�Μc*�����}�W�ڟ�7An��g��\z�P�9�����1���6��c��<����"7��{� CNS�ڋ\
��2W�|?Դ{�1N}� �4̫����sE!�#��?�^�jq���g�s3��`����Sbq
+&3�
+�/�"��x�9v��\3!ԟ��n��+�,��(O1RA��[�E��b}���
�h�
+zM��r(�z���e�+�rNzD�RJ$�i�1�~�]�l����U.Y�<m���~����Q�g\�r@��O����V��t.��Z#d�'�
���G�����_o��@���3g�
�L�h��C�i�.bm̕���������E�g<~�$~.]����W
p���9����^�m��*3;[����х6��\���U�:����^��?__�k#����^ϣ�7�/l��k�����[�z�^u�?V���\�5^w�^���.S���u������3�r�MR<
+<�Fr��+�K{�+�Ҫ�E@I���~A|�����0ӫz��\Ł����_
M_����;c�،>
�d_M�"�!<��O�fQU�0�˦ᛧG��2W�0�?�^��j�M�NA�YȚ`���{��Q�q��$�d
BYA�F�t?�A-���v�y3Z�11���j�5\_���S
+�z��Z��\���e��w����R!6���gÐ!K����X�{
+�^�����+�ˁ{��O�y>w��>'��-%L9���� oA�~dHH��cO���U5|
W]����¸��W8���WG�Ym}��F�������u3f�X^G[f4��ޤחq�h�����W���~��YM��
�b�~2hv��w��nDc;Gv���}��c�F���n/\6��@1�<6 �����q�
��XY�L��Q��s��'�굃��K����y�v�~��K�[x!tǣ�m�C���_EU��`14�'�m�Q(�%���@_^
@|�$�>��Կ��
�"��lȝ�B�s����� �(��������8����%�}{�V��i|�)��x)�ZC�����(��^���
L�DK�K܃t*|w
+�{�g�\�kz
P����,i=��}�7 ���5�i��t��c��t�;Ϟ���k��I����/����>̶
�����3��Ax��#��l�ឞ�R]O:��b��DGf�%w�
+|�P7��U�k��k�W�L��KM��
!8�R�B//�*�r}���4����5����E�e��Mc&Z�5��}e�u���ݘ6�Y�����*+�h�M��
+?��q�
�}�I=[�J�4�9��Hu�
�U��:�ڡ^��6
+����^�&���A��R�r �
+7G6Ȧ�+"��� ?��/pb���M���D3��\�̙�gT�@P�>.V�ʞWC���ڇ~�T��s�r��� ��A�q���
+�a߅^��R��8K��Xϸ�>��
��YB����*)�-L�Vƈ�J�O��D���:�c�js[�a����%�胔�t�Z�m�7���H)[�^/�Q�_83��o),B�[���-K�E�Ӧ��.;[�ɪ^��~����1���N_a�
�dq4f�g��5Ij�T�*�.Y�_zq�u�FX��
��*�����v�ғ��đezIX$�0d<���@��GY#���Z���R1�YWB���lĠ�JS�G�kEMss�F�2"�2�����>�"LzE>�ٙ�1s�
t��J쌑��,�)���GL�aȱ����<�+��N�n�
M/�����V/�^�5�=��S仫�.���I��5��p5�E����P��N/�
+:�!��b?"���>A�uy;���/�*��ʗ�1sYҲ��!�~�
+���UMO���]��y H�^v$O� ���
+V`�p����Ud�Zf��K2���wK
`�����9�wu@G�PPוO�E�s���d�Ε��j/��u�V9�� ��/l��S�"��
���I�X�\F#��({Y~R����/��[ ��������5��/����7�ߧW-Q_7ſ�հ�����f{��d��ok��v�
�-�����]�=��)��\��c��fczaz��u r�5r�&v�
�7q��2��7��YF[N�����P�)v�XN(l's_�F���o�Bc�;rT�N���ڜ�H,�Q���ğ4��X�jt�J@:/�,B����ѹ� �
vW휆�]Q���Cϙ�jd����ne�K�gb&C���#�/Q�a�-\m�a`Bi�/�@0�L�!�`�|
D�pVw��^��Y��� �^�����+�t!�\��n*��T�1���w��bp�[Il:ʱK)H�cQ̪�6�H���z#W�ף�`a��d���S�v�������k?��` B���
endstream
endobj
1470 0 obj
192
endobj
1471 0 obj
<< /Length 1470 0
R >>
stream
+�������������������������������ϳ����Ť�����������������w�����h�����Y�����J�����;�y��x+�p��o�f��e
���f
endstream
endobj
1472 0 obj
(�;f �/J�!'�)
endobj
1473 0 obj
4599
endobj
1474 0 obj
[
/Indexed /DeviceRGB 63 1471 0 R
]
endobj
1475 0 obj
(�������ݛ��B:�U)
endobj
1 0 obj
<<
/Type /Page
/MediaBox [ 0 0 612 792 ]
/Parent 468 0 R
/StructParents 1
/Annots 2 0 R
/Contents 6 0 R
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0
R /F17 395 0 R /F8 1467 0 R >>
/ProcSet [ /PDF /Text /ImageC /ImageI ] >>
/ID 8 0 R
/CropBox [ 0 0 612 792 ]
/Rotate 0
>>
endobj
2 0 obj
[
3 0 R 4 0 R 5 0 R
]
endobj
3 0 obj
<<
/Subtype /Link
/Rect [ 388.6705 287.00391 427.54776
302 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 286 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)>>
>>
endobj
4 0 obj
<<
/Subtype /Link
/Rect [ 344.78015 227.00391 416.71152 242 ]
/A << /S /URI /URI (http://www.acl.lanl.gov/pete)>>
/Border [ 0 0 0 ]
>>
endobj
5 0 obj
<<
/Subtype /Link
/Rect [ 251.0524 77.00391 319.10565 92 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>>
>>
endobj
6 0 obj
<< /Filter /FlateDecode /Length 7 0 R >>
stream
+H��Wێ�F��C!/'ER7rp���Y��$,�`�"[R'M6��Y/��9��m��
�s�4��N�s�8�g����wo)�~���E��iB�/�hVdde���D�i2�p,�4ɩHh6�PYG��:�魉~��?�E�����Q����(�"���I�m�����$��ѻ��b�Ë������h�߀oiQ��d�ҴH�y:�iQG7���{Zt�
�^/���x6�a���Ut��xk����4|�~�g�xL8�H���L�tҗ=�aA�y^����rT���e� ?���E�8�
�je�ݓY��w�Q��s����/#Y�@����ܐ�$C�����f�6�a+-�V����
�JS��,>��mU�%�qs���y4��ˈV:w@�Y��!�o6����
���Q�;I��eE���]~�ggI�s� �<�s����'<�x<-��y�HjU��CW�
���U�ᧆ�4�Ίy�cH�ȶ���P8CʱL��I�(���G6��� �p%�o��XQ/#��ZI�
+�^�Rq_��p���w ��)��SOB》_d���M�(�g
+����Nmd��) '�T�}�'Q�;��'�!�7ZԆ��)�!�U-��
+�@�W8^=1�*�
�����i��N^F܊'I;����������� ʶՠ&g���6Γ|�hR��]�*�AJP��:���&�����~g�I)�K|*���V��dS�m
+R�Yt~k�{E]SI��u"���r�ic��p�U�����-
��UC�l�UЅ��QÁ!5����j�e
@i��ˈ�_a��kL���x��Jtݘf��
+Jx���7*�1�Mgɋ/�&��z(4S���PU�B����m���Y|<��p_)$�x���
�ekI,q�ϱ8�RH�F�Z��u�f�L-Ѩ�(fժ2��t�+Mzi9�_
?�P+�aw�o�p�~�z�QS���o(
��((�P;�.������o�'Ta��y<�'S��"��tLu4���t2�ϟ���U{�"=���VgcP��1��&�?}
�z�脁�Ō�&qZ$GGŭ�q�x"L�,��g'
��?���zu�Y\���=�|:�*C�h���2#�_cd6��K��F��u`F�����O�����Xz�B�0���T�~��|��61������[�u-�����d��$�,;7'�a���g/6g|��x�!ț�>=�>}
9_���<w�e�|ސ4N������!T�yޕ)v�cׂ�x�� �#ǝ1*�2泯b��ϕ�A���� -�R�T�S��l�
s�I��5����s����֫�����F�0W.E��qMװNy�3�;`���
����]S����B��
+�z߇bԞ=|^���F:��'�[��2b�[˳���\gs�=�~����v�+����9T�Մ�`v��#��$��.�6 b�d
�������$Nm �����#��S�t�Z(��IY�P�Ǫ�h����5�}��9n9��:.sp�U�%�.l�'j�
t�y�Ap��lkU�
t���2��GVgSQ6��I�c��i]������rߖ�2վW���-oG<�I7���Yr�JA�8ewZ�Oҝ���T�+ȟ
;�V�ׯ����`�( ���si��,�������hn�Sއ�1���8^N�hA0@�o:�۟��{��^~�*�!{�
�P����|�j���V�}{;�v�!�h��3���ht�1O��:�W�#�Vz9�|1����oR@�ٝ-_�oi2ʊ�DA��,��f����C�
0 �q
endstream
endobj
7 0 obj
1809
endobj
8 0 obj
(�v�[��٪�G*)
endobj
9 0 obj
<<
/Type /Page
/MediaBox [ 0 0 612 792 ]
/Parent 468 0 R
/StructParents 2
/Annots 10 0 R
/Contents 16 0 R
/Resou
rces << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F8 1467 0 R >>
/ProcSet [ /PDF /Text ] >>
/ID 8 0 R
/CropBox [ 0 0 612 792 ]
/Rotate 0
>>
endobj
10 0 obj
[
11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
]
endobj
11 0 obj
<<
/Subtype /Link
/Rect [ 324.91556 711.00391 358.36124 726 ]
/A << /S /URI /URI (http://www.acl.lanl.gov/pete)>>
/Border [ 0 0 0 ]
>>
endobj
12 0 obj
<<
/Subtype /Link
/Rect [ 50 645.00391 192.79782 660 ]
/A << /S /URI /URI (mailto:pete@acl.lanl.gov)>>
/Border [ 0 0 0 ]
>>
endobj
13 0 obj
<<
/Subtype /Link
/Rect [ 264.46063 605.00391 308 620 ]
/A << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>>
/Border [ 0 0 0 ]
>>
endobj
14 0 obj
<<
/Subtype /Link
/Rect [ 311 605.00391 347.53937 620 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>>
>>
endobj
15 0 obj
<<
/Subtype /Link
/Rect [ 160.2748 579.00391 451
.7252 594 ]
/Border [ 0 0 0 ]
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >>
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>>
>>
endobj
16 0 obj
<< /Filter /FlateDecode /Length 17 0 R >>
stream
+H��T�r�6��þ�N,� �L����ȉs�ӱ2H�$� � ���ۻ����R]x�e���syގo�
��o���8���e����xm�
+"�_�� A�U(��k��l�3rF���j��������@@�!� �)� �z+̨
ي�[+�������G7n����W�-�i+@�� `�z��{�����M��y�=��ҧ��� "YY��-~��Gx�A
A�R�4��Ƅ4�&�ӂ��0��{_�� ���D�7���W��9�?u
� WV�Zڕ�Li�7p7��,��´$Y��nupvw]]劉0#�v�bV:m��j�k7뗰�?we�G�����(&����h��
+ji罵R��Y���߈�uF���iL;
�J�n�S�u��l����g\8hY���0���Wg��7/���ҳ�/>�\�Y�K��q7��!
|�{����K���P(��ax�·k�[ �A�Ҽ��rX�ZǕ�o>�tJpTRå ؔ�jH�P*�YR�(�
+T-�˼8��q� �
ݺ�J��$qTd�J:�į|���"K����G#4"�kv�r��v};����},KH�EdQ~3�=���������(��u#�����1�Oq�<=bmw��|?��0�I��ϑfayR@ZP���!f�R����v���YSN�G
+c�m�\�LYJa�-�S���'�u����2
��������%{��,� %��"h
6�z�x�\��ޟH�(2���ʹ�2����,���-���l#�*�R�I4�r�����qlz4
+Y�d!�d�%���vߧ C~�P
endstream
endobj
17 0 obj
863
endobj
18 0 obj
<<
/Type /Page
/MediaBox [ 0 0 612 792 ]
/Parent 468 0 R
/PZ 1.16928
/StructParents 3
/Annots 19 0 R
/Contents 24 0 R
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F10 1464 0 R /F4 397 0 R
/F18 398 0 R /F15 396 0 R /F17 395 0 R
/F12 1468 0 R >>
/ProcSet [ /PDF /Text /ImageC /ImageI ] >>
/ID 26 0 R
/CropBox [ 0 0 612 792 ]
/Rotate 0
>>
endobj
19 0 obj
[
20 0 R 21 0 R 22 0 R 23 0 R
]
endobj
20 0 obj
<<
/Subtype /Link
/Rect [ 54.73438 538.81657 113.92923 551.6416 ]
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#intro)>>
/A << /S /GoTo /D ( ���gW��+��s�s�intro)>>
/Border [ 0 0 0 ]
>>
endobj
21 0 obj
<<
/Subtype /Link
/Rect [ 54.73438 523.42253 104.61375 536.24756 ]
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#template\
s)>>
/A << /S /GoTo /D ( ���gW��+��s�
s�templates)>>
/Border [ 0 0 0 ]
>>
endobj
22 0 obj
<<
/Subtype /Link
/Rect [ 54.73438 508.02849 176.42741 520.85352 ]
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#parsetre\
es)>>
/A << /S /GoTo /D ( ���gW��+��s�s�parsetrees)>>
/Border [ 0 0 0 ]
>>
endobj
23 0 obj
<<
/Subtype /Link
/Rect [ 54.73438 492.63445 129.55391 505.45947 ]
/PA << /S /URI /URI
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#lookahea\
d)>>
/A << /S /GoTo /D ( ���gW��+��s�s�lookahead)>>
/Border [ 0 0 0 ]
>>
endobj
24 0 obj
<< /Filter /FlateDecode /Length 25 0 R >>
stream
+H��W�n�6}���5�mL�ԷWh�t��`i'l?�b`$�f+�*E����w����R��f��@��{ι�辦O��g'o^�Ϟ���'�'`$�(�
$~3YD�8!�(aQ��v���$c�
e8?�2���0��Iy�o*��K�sN�N�&3�2���_H/�A��%7r-NT�����2-��0.���Yn6�G��B� <�3��CCDc�B�*���4;��3�,/�G�'g擐%0����Y�����V]] �o&t%k������P��T�*�}
JI��G4=O�aDX��XH'�6�6�|\���?9 �$�
`�g8� �?��
ű�0�0�OR������u E�}P�C&�G�`�����d����D���VE����5.T���������؈�Z���XLh��Qe�j�?��'$/ť#j!�hmo�
bl��!��-�,�%�s�
+t���
+�#d)��7c� �����V�����Ŷ�_����]�zӑC��0Zp|��y�]�p����v
+n��^�
|�����\|��a�#ݢ���ˎ/E��,����8>b-J�T8o���p�h��T��
��������.�&����8nÜo!{|�/Z�y_Tf�
�Th�Zj^UB������R�,01�j0��v��4}R@,�YK�̘O�!�B��O{��D!s
���������R�6�,�B �w��1��W�Ў����Y� ��6WX��p��N��N��-�v��G
�|6l0�0��ʱU�1�]�(D107��·I� �䄘�A����
�Vz�2���4M�������Sº�jm����/g���������F���f������+����<