Eigen на ARM Cortex M3 с armcc

Я пытаюсь использовать библиотеку Eigen с компилятором armcc, используя цель Keil для Cortex M3, и получаю ошибку компиляции:

Eigen/src/Core/Transpositions.h(387): error:  #135: class template "Eigen::Transpose<Eigen::TranspositionsBase<Derived>>" has no member "derived"

Это происходит из этого кода:

class Transpose<TranspositionsBase<TranspositionsDerived> >
{
    typedef TranspositionsDerived TranspositionType;
    typedef typename TranspositionType::IndicesType IndicesType;
  public:

    explicit Transpose(const TranspositionType& t) : m_transpositions(t) {}

    Index size() const { return m_transpositions.size(); }
    Index rows() const { return m_transpositions.size(); }
    Index cols() const { return m_transpositions.size(); }

    /** \returns the \a matrix with the inverse transpositions applied to the columns.
      */
    template<typename OtherDerived> friend
    const Product<OtherDerived, Transpose, AliasFreeProduct>
    operator*(const MatrixBase<OtherDerived>& matrix, const Transpose& trt)
    {
      // !!!!!!! this line triggers the error
      return Product<OtherDerived, Transpose, AliasFreeProduct>(matrix.derived(), trt.derived()); 
    }

    /** \returns the \a matrix with the inverse transpositions applied to the rows.
      */
    template<typename OtherDerived>
    const Product<Transpose, OtherDerived, AliasFreeProduct>
    operator*(const MatrixBase<OtherDerived>& matrix) const
    {
      return Product<Transpose, OtherDerived, AliasFreeProduct>(*this, matrix.derived()); 
    }

    const TranspositionType& nestedExpression() const { return m_transpositions; }

  protected:
    const TranspositionType& m_transpositions;
};

Я не очень хорошо разбираюсь в магии шаблонов, поэтому мне интересно, как это должно работать.

Я не вижу никаких методов, называемых производными в классе Transpose, он не наследуется ни от какого другого класса. Единственный метод с таким именем находится в классе TranspositionsBase, который передается в Transpose как параметр шаблона и, насколько я вижу, не используется.

Может кто-нибудь объяснить мне, что здесь происходит? И, если возможно, почему возникает ошибка компиляции?


person Amomum    schedule 08.02.2017    source источник
comment
Можете показать свой код, а не код Эйгена?   -  person Avi Ginsburg    schedule 08.02.2017
comment
@AviGinsburg, на данный момент моего кода нет, только #include ‹Eigen/Dense› в одном файле .cpp.   -  person Amomum    schedule 08.02.2017