Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Eigen parses, but finds assignment operators ambiguous or ODR-violating. #201

Open
TobiSchluter opened this issue Feb 16, 2024 · 0 comments

Comments

@TobiSchluter
Copy link

TobiSchluter commented Feb 16, 2024

For example https://godbolt.org/z/aMv65aPW8

Deep in the innards of Eigen 3.4.0 a large number of assignment operators are found to be viable.


int f(Eigen::Matrix3f m, Eigen::Vector3f v) {
    Eigen::Vector3f v2 = m.lu().solve(v);
    
  return 0;
}

I'm not completely sure what the error is supposed to mean. ODR rule violated or it can't decided between several viable assignment operators?

ODR used by: int f(Eigen::Matrix<float, 3, 3, 0, 3, 3>, Eigen::Matrix<float, 3, 1, 0, 3, 1>)
example.cpp:4:38
    Eigen::Vector3f v2 = m.lu().solve(v); 
                                     ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>::Matrix<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::EigenBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:423:9
      : Base(other.derived()) 
        ^

ODR used by: Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::PlainObjectBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::DenseBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:594:19
      _set_noalias(other); 
                  ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::_set_noalias<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::DenseBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:797:41
      internal::call_assignment_no_alias(this->derived(), other.derived(), internal::assign_op<Scalar,typename OtherDerived::Scalar>()); 
                                        ^

ODR used by: void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49
  Assignment<ActualDstTypeCleaned,Src,Func>::run(actualDst, src, func); 
                                                ^

ODR used by: void Eigen::internal::Assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>, Eigen::internal::assign_op<float, float>, Eigen::internal::Dense2Dense, void>::run(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Solve.h:147:26
    src.dec()._solve_impl(src.rhs(), dst); 
                         ^

ODR used by: void Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>::_solve_impl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>(const Eigen::Matrix<float, 3, 1, 0, 3, 1>&, Eigen::Matrix<float, 3, 1, 0, 3, 1>&) const
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/LU/PartialPivLU.h:234:11
      dst = permutationP() * rhs; 
          ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::Matrix<float, 3, 1, 0, 3, 1>::operator=<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(const Eigen::DenseBase<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:225:24
      return Base::_set(other); 
                       ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::_set<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(const Eigen::DenseBase<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:779:32
      internal::call_assignment(this->derived(), other.derived()); 
                               ^

ODR used by: void Eigen::internal::call_assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:836:18
  call_assignment(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>()); 
                 ^

ODR used by: void Eigen::internal::call_assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&, void*)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:858:27
  call_assignment_no_alias(dst, src, func); 
                          ^

ODR used by: void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49
  Assignment<ActualDstTypeCleaned,Src,Func>::run(actualDst, src, func); 
                                                ^

ODR used by: void Eigen::internal::Assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>, Eigen::internal::Dense2Dense, void>::run(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:148:43
    generic_product_impl<Lhs, Rhs>::evalTo(dst, src.lhs(), src.rhs()); 
                                          ^

ODR used by: void Eigen::internal::generic_product_impl<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::PermutationShape, Eigen::DenseShape, 3>::evalTo<Eigen::Matrix<float, 3, 1, 0, 3, 1>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::PermutationMatrix<3, 3, int>&, const Eigen::Matrix<float, 3, 1, 0, 3, 1>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1063:72
    permutation_matrix_product<Rhs, OnTheLeft, false, MatrixShape>::run(dst, lhs, rhs); 
                                                                       ^

  instantiation: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1007:55
  during instantiation of function template void Eigen::internal::permutation_matrix_product<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, false, Eigen::DenseShape>::run<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::PermutationMatrix<3, 3, int>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::PermutationMatrix<3, 3, int>&, const Eigen::Matrix<float, 3, 1, 0, 3, 1>&)
  template arguments: [
    'ExpressionType' = Eigen::Matrix<float, 3, 1, 0, 3, 1>
      class 'Matrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:178:1
    'Side' = int 1
    'Transposed' = bool false
    'Dest' = Eigen::Matrix<float, 3, 1, 0, 3, 1>
      class 'Matrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:178:1
    'PermutationType' = Eigen::PermutationMatrix<3, 3, int>
      class 'PermutationMatrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PermutationMatrix.h:297:1
  ]
      static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) 
                                                        ^
    error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1048:11
    call to operator= is ambiguous
      argument 0 is prvalue Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
        Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
      argument 1 is prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
        Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
              = 
              ^
      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:111:5
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>::operator=(const Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:111:5
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:161:5
      Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>& Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>::operator=(const Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:161:5
      Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>& Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:341:5
      Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>& Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>::operator=(const Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:341:5
      Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>& Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/MapBase.h:292:14
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>::operator=(const Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>&)
          Derived& operator=(const MapBase& other) 
                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:55:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=(const Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other) 
                                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:73:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::EigenBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other) 
                                   ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:82:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=(const Eigen::ReturnByValue<OtherDerived>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other) 
                                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1051:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        cannot deduce parameter 'other' with type const Eigen::ReturnByValue<OtherDerived>& from argument prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
                       (mat, ((Side==OnTheRight) ^ Transposed) ? perm.indices().coeff(i) : i); 
                       ^

ASM generation compiler returned: 1
ODR used by: int f(Eigen::Matrix<float, 3, 3, 0, 3, 3>, Eigen::Matrix<float, 3, 1, 0, 3, 1>)
example.cpp:4:38
    Eigen::Vector3f v2 = m.lu().solve(v); 
                                     ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>::Matrix<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::EigenBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:423:9
      : Base(other.derived()) 
        ^

ODR used by: Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::PlainObjectBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::DenseBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:594:19
      _set_noalias(other); 
                  ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::_set_noalias<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>(const Eigen::DenseBase<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:797:41
      internal::call_assignment_no_alias(this->derived(), other.derived(), internal::assign_op<Scalar,typename OtherDerived::Scalar>()); 
                                        ^

ODR used by: void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49
  Assignment<ActualDstTypeCleaned,Src,Func>::run(actualDst, src, func); 
                                                ^

ODR used by: void Eigen::internal::Assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>, Eigen::internal::assign_op<float, float>, Eigen::internal::Dense2Dense, void>::run(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Solve.h:147:26
    src.dec()._solve_impl(src.rhs(), dst); 
                         ^

ODR used by: void Eigen::PartialPivLU<Eigen::Matrix<float, 3, 3, 0, 3, 3>>::_solve_impl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Matrix<float, 3, 1, 0, 3, 1>>(const Eigen::Matrix<float, 3, 1, 0, 3, 1>&, Eigen::Matrix<float, 3, 1, 0, 3, 1>&) const
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/LU/PartialPivLU.h:234:11
      dst = permutationP() * rhs; 
          ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::Matrix<float, 3, 1, 0, 3, 1>::operator=<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(const Eigen::DenseBase<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:225:24
      return Base::_set(other); 
                       ^

ODR used by: Eigen::Matrix<float, 3, 1, 0, 3, 1>& Eigen::PlainObjectBase<Eigen::Matrix<float, 3, 1, 0, 3, 1>>::_set<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(const Eigen::DenseBase<Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PlainObjectBase.h:779:32
      internal::call_assignment(this->derived(), other.derived()); 
                               ^

ODR used by: void Eigen::internal::call_assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:836:18
  call_assignment(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>()); 
                 ^

ODR used by: void Eigen::internal::call_assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&, void*)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:858:27
  call_assignment_no_alias(dst, src, func); 
                          ^

ODR used by: void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/AssignEvaluator.h:890:49
  Assignment<ActualDstTypeCleaned,Src,Func>::run(actualDst, src, func); 
                                                ^

ODR used by: void Eigen::internal::Assignment<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>, Eigen::internal::assign_op<float, float>, Eigen::internal::Dense2Dense, void>::run(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::Product<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, 2>&, const Eigen::internal::assign_op<float, float>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:148:43
    generic_product_impl<Lhs, Rhs>::evalTo(dst, src.lhs(), src.rhs()); 
                                          ^

ODR used by: void Eigen::internal::generic_product_impl<Eigen::PermutationMatrix<3, 3, int>, Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::PermutationShape, Eigen::DenseShape, 3>::evalTo<Eigen::Matrix<float, 3, 1, 0, 3, 1>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::PermutationMatrix<3, 3, int>&, const Eigen::Matrix<float, 3, 1, 0, 3, 1>&)
/opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1063:72
    permutation_matrix_product<Rhs, OnTheLeft, false, MatrixShape>::run(dst, lhs, rhs); 
                                                                       ^

  instantiation: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1007:55
  during instantiation of function template void Eigen::internal::permutation_matrix_product<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, false, Eigen::DenseShape>::run<Eigen::Matrix<float, 3, 1, 0, 3, 1>, Eigen::PermutationMatrix<3, 3, int>>(Eigen::Matrix<float, 3, 1, 0, 3, 1>&, const Eigen::PermutationMatrix<3, 3, int>&, const Eigen::Matrix<float, 3, 1, 0, 3, 1>&)
  template arguments: [
    'ExpressionType' = Eigen::Matrix<float, 3, 1, 0, 3, 1>
      class 'Matrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:178:1
    'Side' = int 1
    'Transposed' = bool false
    'Dest' = Eigen::Matrix<float, 3, 1, 0, 3, 1>
      class 'Matrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Matrix.h:178:1
    'PermutationType' = Eigen::PermutationMatrix<3, 3, int>
      class 'PermutationMatrix' declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/PermutationMatrix.h:297:1
  ]
      static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) 
                                                        ^
    error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1048:11
    call to operator= is ambiguous
      argument 0 is prvalue Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
        Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
      argument 1 is prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
        Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
              = 
              ^
      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:111:5
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>::operator=(const Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:111:5
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:161:5
      Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>& Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>::operator=(const Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:161:5
      Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>& Eigen::BlockImpl<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, Eigen::Dense>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:341:5
      Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>& Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>::operator=(const Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) 
          ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:341:5
      Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>& Eigen::internal::BlockImpl_dense<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false, true>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
          EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) 
          ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/MapBase.h:292:14
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>::operator=(const Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>&)
          Derived& operator=(const MapBase& other) 
                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::MapBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>, 1>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:55:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=(const Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other) 
                                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1046:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        binding parameter 'other' to argument 0
        cannot convert prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> to const Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&
          Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false> declared at /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Block.h:103:75
                       (dst, ((Side==OnTheLeft) ^ Transposed) ? perm.indices().coeff(i) : i) 
                       ^

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:73:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>(const Eigen::EigenBase<Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other) 
                                   ^
        note: viable

      candidate: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/Assign.h:82:30
      Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>& Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>>::operator=(const Eigen::ReturnByValue<OtherDerived>&)
      EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other) 
                                   ^
        error: /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/src/Core/ProductEvaluators.h:1051:16
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Core:332:10
        ... included from /opt/compiler-explorer/libs/eigen/v3.4.0/Eigen/Dense:1:10
        ... included from example.cpp:1:10
        cannot deduce parameter 'other' with type const Eigen::ReturnByValue<OtherDerived>& from argument prvalue Eigen::Block<const Eigen::Matrix<float, 3, 1, 0, 3, 1>, 1, 1, false>
                       (mat, ((Side==OnTheRight) ^ Transposed) ? perm.indices().coeff(i) : i); 
                       ^

Version info:

  Circle public preview build 200
  Built Jul 29 2023 11:15:57 EDT
  (c) 2023 Sean Baxter
  https://www.circle-lang.org/
  Twitter: @seanbax
ASM generation compiler returned: 0
circle version 1.0.0-200
  Circle public preview build 200
  Built Jul 29 2023 11:15:57 EDT
  (c) 2023 Sean Baxter
  https://www.circle-lang.org/
  Twitter: @seanbax
Compiler did not produce an executable
Execution build compiler returned: 0```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant