Compile error using Product of Matrix with IndexedView with non-trivial increment
Dear Eigen community, I have problems to compile a code which i would expect to compile. I'm wondering whether thats a bug. I would really appreciate your help!
Summary
The compilation fails if I try to multiply a Matrix with an IndexedView of an Matrix with an non trivial increment.
The compiler complains about a missing data method in IndexedView.
Environment
- Operating System : Linux
- Architecture : x64
- Eigen Version : 3.4
- Compiler Version : clang++-11
- Compile Flags : -O0 -g ...
- Vector Extension : SSE + AVX2
Minimal Example
https://godbolt.org/z/G58hxMeMq
#include <iostream>
#include <Eigen/Eigen>
using namespace Eigen;
void foo(MatrixXd a, MatrixXd b){
MatrixXd c = a*b(seqN(0,5,2), all);
}
Relevant logs
compiler output:
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:347:18: error: 'const class Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >' has no member named 'data'
347 | : Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
| ~~~~^~~~
In file included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:313,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Eigen:1,
from <source>:2:
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Transpose.h: In instantiation of 'const Scalar* Eigen::TransposeImpl<MatrixType, Eigen::Dense>::data() const [with MatrixType = const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; Eigen::TransposeImpl<MatrixType, Eigen::Dense>::Scalar = double]':
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:347:22: required from 'Eigen::internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel, true>::BlockImpl_dense(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:162:88: required from 'Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>::BlockImpl(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:118:46: required from 'Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>::Block(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/plugins/BlockMethods.h:1127:10: required from 'Eigen::DenseBase<Derived>::ConstRowXpr Eigen::DenseBase<Derived>::row(Eigen::Index) const [with Derived = Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; Eigen::DenseBase<Derived>::ConstRowXpr = const Eigen::Block<const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >, 1, -1, true>; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/GeneralProduct.h:379:43: required from 'static void Eigen::internal::gemv_dense_selector<2, 1, false>::run(const Lhs&, const Rhs&, Dest&, const typename Dest::Scalar&) [with Lhs = Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; Rhs = Eigen::Transpose<const Eigen::Block<const Eigen::Matrix<double, -1, -1>, 1, -1, false> >; Dest = Eigen::Transpose<Eigen::Block<Eigen::Matrix<double, -1, -1>, 1, -1, false> >; typename Dest::Scalar = double]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/GeneralProduct.h:207:12: [ skipping 4 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:148:43: required from 'static void Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::run(DstXprType&, const SrcXprType&, const Eigen::internal::assign_op<Scalar, Scalar>&) [with DstXprType = Eigen::Matrix<double, -1, -1>; Lhs = Eigen::Matrix<double, -1, -1>; Rhs = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int Options = 0; Scalar = double; Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::SrcXprType = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49: required from 'void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Matrix<double, -1, -1>; Src = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Func = Eigen::internal::assign_op<double, double>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:797:41: required from 'Derived& Eigen::PlainObjectBase<Derived>::_set_noalias(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:594:19: required from 'Eigen::PlainObjectBase<Derived>::PlainObjectBase(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:423:29: required from 'Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; _Scalar = double; int _Rows = -1; int _Cols = -1; int _Options = 0; int _MaxRows = -1; int _MaxCols = -1]'
<source>:7:38: required from here
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Transpose.h:142:70: error: 'const type' {aka 'const class Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >'} has no member named 'data'
142 | const Scalar* data() const { return derived().nestedExpression().data(); }
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
ASM generation compiler returned: 1
In file included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:309,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Eigen:1,
from <source>:2:
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h: In instantiation of 'Eigen::internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel, true>::BlockImpl_dense(XprType&, Eigen::Index) [with XprType = const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int BlockRows = -1; int BlockCols = 1; bool InnerPanel = true; Eigen::Index = long int]':
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:162:88: required from 'Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>::BlockImpl(XprType&, Eigen::Index) [with XprType = const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int BlockRows = -1; int BlockCols = 1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:118:46: required from 'Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>::Block(XprType&, Eigen::Index) [with XprType = const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int BlockRows = -1; int BlockCols = 1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/plugins/BlockMethods.h:1106:10: required from 'Eigen::DenseBase<Derived>::ConstColXpr Eigen::DenseBase<Derived>::col(Eigen::Index) const [with Derived = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; Eigen::DenseBase<Derived>::ConstColXpr = const Eigen::Block<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, -1, 1, true>; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/products/GeneralMatrixMatrix.h:479:50: required from 'static void Eigen::internal::generic_product_impl<Lhs, Rhs, Eigen::DenseShape, Eigen::DenseShape, 8>::scaleAndAddTo(Dest&, const Lhs&, const Rhs&, const Scalar&) [with Dest = Eigen::Matrix<double, -1, -1>; Lhs = Eigen::Matrix<double, -1, -1>; Rhs = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; Eigen::internal::generic_product_impl<Lhs, Rhs, Eigen::DenseShape, Eigen::DenseShape, 8>::Scalar = double]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/products/GeneralMatrixMatrix.h:445:20: required from 'static void Eigen::internal::generic_product_impl<Lhs, Rhs, Eigen::DenseShape, Eigen::DenseShape, 8>::evalTo(Dst&, const Lhs&, const Rhs&) [with Dst = Eigen::Matrix<double, -1, -1>; Lhs = Eigen::Matrix<double, -1, -1>; Rhs = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:148:43: required from 'static void Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::run(DstXprType&, const SrcXprType&, const Eigen::internal::assign_op<Scalar, Scalar>&) [with DstXprType = Eigen::Matrix<double, -1, -1>; Lhs = Eigen::Matrix<double, -1, -1>; Rhs = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int Options = 0; Scalar = double; Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::SrcXprType = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49: required from 'void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Matrix<double, -1, -1>; Src = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Func = Eigen::internal::assign_op<double, double>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:797:41: required from 'Derived& Eigen::PlainObjectBase<Derived>::_set_noalias(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:594:19: required from 'Eigen::PlainObjectBase<Derived>::PlainObjectBase(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:423:29: required from 'Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; _Scalar = double; int _Rows = -1; int _Cols = -1; int _Options = 0; int _MaxRows = -1; int _MaxCols = -1]'
<source>:7:38: required from here
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:347:18: error: 'const class Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >' has no member named 'data'
347 | : Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
| ~~~~^~~~
In file included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:313,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1,
from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Eigen:1,
from <source>:2:
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Transpose.h: In instantiation of 'const Scalar* Eigen::TransposeImpl<MatrixType, Eigen::Dense>::data() const [with MatrixType = const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; Eigen::TransposeImpl<MatrixType, Eigen::Dense>::Scalar = double]':
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:347:22: required from 'Eigen::internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel, true>::BlockImpl_dense(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:162:88: required from 'Eigen::BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Eigen::Dense>::BlockImpl(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:118:46: required from 'Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>::Block(XprType&, Eigen::Index) [with XprType = const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; int BlockRows = 1; int BlockCols = -1; bool InnerPanel = true; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/plugins/BlockMethods.h:1127:10: required from 'Eigen::DenseBase<Derived>::ConstRowXpr Eigen::DenseBase<Derived>::row(Eigen::Index) const [with Derived = Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; Eigen::DenseBase<Derived>::ConstRowXpr = const Eigen::Block<const Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >, 1, -1, true>; Eigen::Index = long int]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/GeneralProduct.h:379:43: required from 'static void Eigen::internal::gemv_dense_selector<2, 1, false>::run(const Lhs&, const Rhs&, Dest&, const typename Dest::Scalar&) [with Lhs = Eigen::Transpose<const Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> > >; Rhs = Eigen::Transpose<const Eigen::Block<const Eigen::Matrix<double, -1, -1>, 1, -1, false> >; Dest = Eigen::Transpose<Eigen::Block<Eigen::Matrix<double, -1, -1>, 1, -1, false> >; typename Dest::Scalar = double]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/GeneralProduct.h:207:12: [ skipping 4 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:148:43: required from 'static void Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::run(DstXprType&, const SrcXprType&, const Eigen::internal::assign_op<Scalar, Scalar>&) [with DstXprType = Eigen::Matrix<double, -1, -1>; Lhs = Eigen::Matrix<double, -1, -1>; Rhs = Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >; int Options = 0; Scalar = double; Eigen::internal::Assignment<DstXprType, Eigen::Product<Lhs, Rhs, Options>, Eigen::internal::assign_op<Scalar, Scalar>, Eigen::internal::Dense2Dense, typename Eigen::internal::enable_if<((Options == Eigen::DefaultProduct) || (Options == Eigen::AliasFreeProduct))>::type>::SrcXprType = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49: required from 'void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Matrix<double, -1, -1>; Src = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Func = Eigen::internal::assign_op<double, double>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:797:41: required from 'Derived& Eigen::PlainObjectBase<Derived>::_set_noalias(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:594:19: required from 'Eigen::PlainObjectBase<Derived>::PlainObjectBase(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; Derived = Eigen::Matrix<double, -1, -1>]'
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:423:29: required from 'Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Matrix(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = Eigen::Product<Eigen::Matrix<double, -1, -1>, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >, 0>; _Scalar = double; int _Rows = -1; int _Cols = -1; int _Options = 0; int _MaxRows = -1; int _MaxCols = -1]'
<source>:7:38: required from here
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Transpose.h:142:70: error: 'const type' {aka 'const class Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, Eigen::ArithmeticSequence<long int, long int, long int>, Eigen::internal::AllRange<-1> >'} has no member named 'data'
142 | const Scalar* data() const { return derived().nestedExpression().data(); }
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~