Skip to content
GitLab
    • GitLab: the DevOps platform
    • Explore GitLab
    • Install GitLab
    • How GitLab compares
    • Get started
    • GitLab docs
    • GitLab Learn
  • Pricing
  • Talk to an expert
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
    • Switch to GitLab Next
    Projects Groups Topics Snippets
  • Register
  • Sign in
  • eigen eigen
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 699
    • Issues 699
    • List
    • Boards
    • Service Desk
    • Milestones
    • Requirements
  • Custom issue tracker
    • Custom issue tracker
  • Merge requests 25
    • Merge requests 25
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
    • Test cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Terraform modules
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • libeigenlibeigen
  • eigeneigen
  • Issues
  • #1015
Closed
Open
Issue created Dec 04, 2019 by Eigen Bugzilla@eigenbzReporter

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.
$

Blocking

#558 (closed)

Edited Dec 05, 2019 by Eigen Bugzilla
Assignee
Assign to
Time tracking