seanbaxter / circle

The compiler is available for download. Get it!
http://www.circle-lang.org/
2.35k stars 72 forks source link

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

Open TobiSchluter opened 7 months ago

TobiSchluter commented 7 months ago

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```