diff options
Diffstat (limited to 'Eigen/src/Core/util/ForwardDeclarations.h')
-rw-r--r-- | Eigen/src/Core/util/ForwardDeclarations.h | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h index d0ba7328f..eb7e93b91 100644 --- a/Eigen/src/Core/util/ForwardDeclarations.h +++ b/Eigen/src/Core/util/ForwardDeclarations.h @@ -46,10 +46,19 @@ template<typename ExpressionType> class NestByValue; template<typename ExpressionType> class ForceAlignedAccess; template<typename ExpressionType> class SwapWrapper; template<typename MatrixType> class Minor; -// MSVC will not compile when the expression ei_traits<MatrixType>::Flags&DirectAccessBit -// is put into brackets like (ei_traits<MatrixType>::Flags&DirectAccessBit)! + +// MSVC has a big bug: when the expression ei_traits<MatrixType>::Flags&DirectAccessBit ? HasDirectAccess : NoDirectAccess +// is used as default template parameter value here, it gets mis-evaluated as just ei_traits<MatrixType>::Flags +// Moreover, adding brackets tends to give compilation errors with MSVC. +// Solution: defer that to a helper struct. +template<typename MatrixType> +struct ei_block_direct_access_status +{ + enum { ret = ei_traits<MatrixType>::Flags&DirectAccessBit ? HasDirectAccess : NoDirectAccess }; +}; template<typename MatrixType, int BlockRows=Dynamic, int BlockCols=Dynamic, - int _DirectAccessStatus = ei_traits<MatrixType>::Flags&DirectAccessBit ? HasDirectAccess : NoDirectAccess> class Block; + int _DirectAccessStatus = ei_block_direct_access_status<MatrixType>::ret> class Block; + template<typename MatrixType, int Size=Dynamic> class VectorBlock; template<typename MatrixType> class Transpose; template<typename MatrixType> class Conjugate; @@ -163,6 +172,17 @@ template<typename Scalar,int Dim> class Translation; template<typename Scalar> class UniformScaling; template<typename MatrixType,int Direction> class Homogeneous; +// MatrixFunctions module +template<typename Derived> struct MatrixExponentialReturnValue; +template<typename Derived> struct MatrixFunctionReturnValue; +template <typename Scalar> +struct ei_stem_function +{ + typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; + typedef ComplexScalar type(ComplexScalar, int); +}; + + #ifdef EIGEN2_SUPPORT template<typename ExpressionType> class Cwise; #endif |