EIGEN_USE_MKL_ALL cause compilation failures due to template parameter errors
Submitted by Yan Zhou
Assigned to Nobody
Link to original bugzilla bug (#1015)
Version: 3.3 (current stable)
Description
When using the most recent development version of Eigen as the time of writing,
the macro EIGEN_USE_MKL_ALL causes quite a few errors. All appears to be the case that a non-type argument is used when a type parameter is expected in template
Below is a minimal example
#define EIGEN_USE_MKL_ALL
#include <Eigen/Eigen>
int main () {}
And the following is output from clang, (other compilers produce the same errors, just lest readable)
$ clang++ -o test test.cpp
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:51:49: error: template argument for template type parameter must be a type
general_matrix_vector_product<Index,LhsScalar,LhsStorageOrder,ConjugateLhs,RhsScalar,ConjugateRhs,BuiltIn> {};
^~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:84:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(double)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:55:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:84:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(double)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:72:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:85:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(float)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:55:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:85:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(float)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:72:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:86:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(dcomplex)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:55:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:86:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(dcomplex)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:72:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:87:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(scomplex)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:55:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:416:
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:87:1: error: template argument for template type parameter must be a type
EIGEN_MKL_GEMV_SPECIALIZE(scomplex)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h:72:51: note: expanded from macro 'EIGEN_MKL_GEMV_SPECIALIZE'
struct general_matrix_vector_product<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \
^~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/util/BlasUtil.h:38:39: note: template parameter is declared here
typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
^
In file included from test.cpp:2:
In file included from /usr/local/include/eigen3/Eigen/Eigen:1:
In file included from /usr/local/include/eigen3/Eigen/Dense:1:
In file included from /usr/local/include/eigen3/Eigen/Core:426:
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:79:5: error: unknown template name 'assign_impl'
: assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>,Traversal,Unrolling,BuiltIn>
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: error: explicit specialization of non-template struct 'assign_impl'
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:10: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:124:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,CompleteUnrolling)
^~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:125:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,InnerUnrolling)
^~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:126:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearTraversal,NoUnrolling)
^~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:127:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearTraversal,CompleteUnrolling)
^~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:128:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,NoUnrolling)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:129:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,CompleteUnrolling)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:130:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,InnerUnrolling)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:131:33: error: template argument for template type parameter must be a type
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearVectorizedTraversal,CompleteUnrolling)
^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:117:72: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized> { \
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:123:1: note: template parameter is declared here
EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling)
^
/usr/local/include/eigen3/Eigen/src/Core/Assign_MKL.h:116:59: note: expanded from macro 'EIGEN_MKL_VML_SPECIALIZE_ASSIGN'
template<typename Derived1, typename Derived2, typename UnaryOp> \
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
$