inline ArrayRef<typename boost::remove_const<typename Derived::Element>::type, Derived::ND::value, Derived::ND::value> copy(ExpressionBase<Derived> const & expr) { ArrayRef<typename boost::remove_const<typename Derived::Element>::type, Derived::ND::value,Derived::ND::value> r( allocate(expr.getShape()) ); r = expr; return r; }
Cosh(const ExpressionBase<REAL_T, EXPR>& expr) : expr_m(expr.Cast()), value_m(expr.GetValue()) { }
ExpressionDot<LExpressionType, ExpressionVector<Vdim> > dot(const ExpressionBase<LExpressionType>& l, const VectorSmall<Vdim>& r) { return ExpressionDot<LExpressionType,ExpressionVector<Vdim> >(l.cast(),ExpressionVector<Vdim>(r)); }
ExpressionDot<ExpressionVector<Vdim>,RExpressionType> dot(const VectorSmall<Vdim>& l, const ExpressionBase<RExpressionType>& r) { return ExpressionDot<ExpressionVector<Vdim>,RExpressionType>(ExpressionVector<Vdim>(l),r.cast()); }
ExpressionDot<ExpressionScalar,RExpressionType> dot(const Real& l, const ExpressionBase<RExpressionType>& r) { return ExpressionDot<ExpressionScalar,RExpressionType>(ExpressionScalar(l),r.cast()); }
ExpressionDot<LExpressionType, ExpressionScalar > dot(const ExpressionBase<LExpressionType>& l, const Real& r) { return ExpressionDot<LExpressionType,ExpressionScalar>(l.cast(),ExpressionScalar(r)); }
ExpressionDot<LExpressionType,RExpressionType> dot(const ExpressionBase<LExpressionType>& l, const ExpressionBase<RExpressionType>& r) { return ExpressionDot<LExpressionType,RExpressionType>(l.cast(),r.cast()); }
inline auto makeOperation(const ExpressionBase<DerivedT>& a_operand) { return UnaryOperation<OperationT, DerivedT>(a_operand.self()); }
ExpressionAddition<LExpressionType, ExpressionVector<Vdim> > operator+ (const ExpressionBase<LExpressionType>& l, const VectorSmall<Vdim>& r) { return ExpressionAddition<LExpressionType, ExpressionVector<Vdim> > (l.cast(), ExpressionVector<Vdim> (r) ); }
ExpressionAddition<ExpressionVector<Vdim>, RExpressionType> operator+ (const VectorSmall<Vdim>& l, const ExpressionBase<RExpressionType>& r) { return ExpressionAddition<ExpressionVector<Vdim>, RExpressionType> (ExpressionVector<Vdim> (l), r.cast() ); }
ExpressionAddition<ExpressionScalar, RExpressionType> operator+ (const Real& l, const ExpressionBase<RExpressionType>& r) { return ExpressionAddition<ExpressionScalar, RExpressionType> (ExpressionScalar (l), r.cast() ); }
ExpressionAddition<LExpressionType, ExpressionScalar > operator+ (const ExpressionBase<LExpressionType>& l, const Real& r) { return ExpressionAddition<LExpressionType, ExpressionScalar> (l.cast(), ExpressionScalar (r) ); }
ExpressionAddition<LExpressionType, RExpressionType> operator+ (const ExpressionBase<LExpressionType>& l, const ExpressionBase<RExpressionType>& r) { return ExpressionAddition<LExpressionType, RExpressionType> (l.cast(), r.cast() ); }
inline auto makeOperation(const ExpressionBase<DerivedT1>& a_operand1, const ExpressionBase<DerivedT2>& a_operand2) { return BinaryOperation<OperationT, DerivedT1, DerivedT2>(a_operand1.self(), a_operand2.self()); }
Log10(const ExpressionBase<REAL_T, EXPR>& expr) : expr_m(expr.Cast()) { }
Log(const ExpressionBase<REAL_T, EXPR>& expr) : expr_m(expr.Cast()), value_m(expr_m.GetValue()), value2_m(REAL_T(1.0) / value_m) { }
ExpressionExponential<ExpressionType> exp (const ExpressionBase<ExpressionType>& l) { return ExpressionExponential<ExpressionType > (l.cast() ); }