25  struct AnalyticExprWrapper : 
public std::shared_ptr<AnalyticExpr<T>>
 
   27    AnalyticExprWrapper(
const AnalyticExprWrapper<T>& e)
 
   28      : std::shared_ptr<AnalyticExpr<T>>(e)
 
   31    AnalyticExprWrapper(
const std::shared_ptr<AnalyticExpr<T>>& e)
 
   32      : std::shared_ptr<AnalyticExpr<T>>(e)
 
   36      requires std::is_base_of_v<AnalyticVarExpr<T>,V>
 
   37    AnalyticExprWrapper(
const V& e)
 
   38      : std::shared_ptr<AnalyticExpr<T>>({ std::dynamic_pointer_cast<AnalyticExpr<T>>(e.copy()) })
 
   42      requires (!std::is_base_of_v<AnalyticVarExpr<T>,C>)
 
   43    AnalyticExprWrapper(
const C& e)
 
   44      requires std::is_same_v<typename ExprType<C>::Type,T>
 
   45      : std::shared_ptr<AnalyticExpr<T>>(const_value(e))
 
   48    inline AnalyticExprWrapper<ScalarType> operator[](Index i) 
const 
   49      requires std::is_same_v<T,VectorType>
 
   51      return { std::make_shared<AnalyticOperationExpr<ComponentOp,ScalarType,VectorType>>(*
this,i) };
 
   54    inline AnalyticExprWrapper<VectorType> subvector(Index i, Index j) 
const 
   55      requires std::is_same_v<T,VectorType>
 
   57      return { std::make_shared<AnalyticOperationExpr<SubvectorOp,VectorType,VectorType>>(*
this,i,j) };
 
   60    inline AnalyticExprWrapper<ScalarType> operator()(Index i, Index j) 
const 
   61      requires std::is_same_v<T,MatrixType>
 
   63      return { std::make_shared<AnalyticOperationExpr<ComponentOp,ScalarType,MatrixType>>(*
this,i,j) };
 
   67  using ScalarExpr = AnalyticExprWrapper<ScalarType>;
 
   68  using VectorExpr = AnalyticExprWrapper<VectorType>;
 
   69  using MatrixExpr = AnalyticExprWrapper<MatrixType>;
 
   72  concept IsScalarExprOrVar = (std::is_base_of_v<VarBase,X> || std::is_base_of_v<ScalarExpr,X>);
 
   75  concept IsVectorExprOrVar = (std::is_base_of_v<VarBase,X> || std::is_base_of_v<VectorExpr,X>);
 
   78  concept IsMatrixExprOrVar = (std::is_base_of_v<VarBase,X> || std::is_base_of_v<MatrixExpr,X>);
 
Definition codac2_OctaSym.h:21