Browse Source

Win reqs to redefine nn in each lambda

Alec Jacobson 4 years ago
parent
commit
233c1027db
1 changed files with 12 additions and 4 deletions
  1. 12 4
      include/igl/min_quad_with_fixed.cpp

+ 12 - 4
include/igl/min_quad_with_fixed.cpp

@@ -611,8 +611,10 @@ IGL_INLINE Eigen::Matrix<Scalar,n,1> igl::min_quad_with_fixed(
   // min_x ½ xᵀ H x + xᵀ f   subject to A x = b and x(k) = bc(k)
   // min_x ½ xᵀ H x + xᵀ f   subject to A x = b and x(k) = bc(k)
   // let zᵀ = [xᵀ λᵀ]
   // let zᵀ = [xᵀ λᵀ]
   // min_z ½ zᵀ [H Aᵀ;A 0] z + zᵀ [f;-b]   z(k) = bc(k)
   // min_z ½ zᵀ [H Aᵀ;A 0] z + zᵀ [f;-b]   z(k) = bc(k)
-  const auto make_HH = [nn,dyn_nn,dyn_n,dyn_m,&A,&H]()
+  const auto make_HH = [&]()
   {
   {
+    // Windows can't remember that nn is const.
+    constexpr const int nn = n == Eigen::Dynamic ? Eigen::Dynamic : n+m;
     Eigen::Matrix<Scalar,nn,nn> HH =
     Eigen::Matrix<Scalar,nn,nn> HH =
       Eigen::Matrix<Scalar,nn,nn>::Zero(dyn_nn,dyn_nn);
       Eigen::Matrix<Scalar,nn,nn>::Zero(dyn_nn,dyn_nn);
     HH.topLeftCorner(dyn_n,dyn_n) = H;
     HH.topLeftCorner(dyn_n,dyn_n) = H;
@@ -621,24 +623,30 @@ IGL_INLINE Eigen::Matrix<Scalar,n,1> igl::min_quad_with_fixed(
     return HH;
     return HH;
   };
   };
   const Eigen::Matrix<Scalar,nn,nn> HH = make_HH();
   const Eigen::Matrix<Scalar,nn,nn> HH = make_HH();
-  const auto make_ff  = [nn,dyn_nn,dyn_n,dyn_m,&f,&b]()
+  const auto make_ff  = [&]()
   {
   {
+    // Windows can't remember that nn is const.
+    constexpr const int nn = n == Eigen::Dynamic ? Eigen::Dynamic : n+m;
     Eigen::Matrix<Scalar,nn,1> ff(dyn_nn);
     Eigen::Matrix<Scalar,nn,1> ff(dyn_nn);
     ff.head(dyn_n) =  f;
     ff.head(dyn_n) =  f;
     ff.tail(dyn_m) = -b;
     ff.tail(dyn_m) = -b;
     return ff;
     return ff;
   };
   };
   const Eigen::Matrix<Scalar,nn,1> ff = make_ff();
   const Eigen::Matrix<Scalar,nn,1> ff = make_ff();
-  const auto make_kk  = [nn,dyn_nn,dyn_n,dyn_m,&k]()
+  const auto make_kk  = [&]()
   {
   {
+    // Windows can't remember that nn is const.
+    constexpr const int nn = n == Eigen::Dynamic ? Eigen::Dynamic : n+m;
     Eigen::Array<bool,nn,1> kk =
     Eigen::Array<bool,nn,1> kk =
       Eigen::Array<bool,nn,1>::Constant(dyn_nn,1,false);
       Eigen::Array<bool,nn,1>::Constant(dyn_nn,1,false);
     kk.head(dyn_n) =  k;
     kk.head(dyn_n) =  k;
     return kk;
     return kk;
   };
   };
   const Eigen::Array<bool,nn,1> kk = make_kk();
   const Eigen::Array<bool,nn,1> kk = make_kk();
-  const auto make_bcbc= [nn,dyn_nn,dyn_n,&bc]()
+  const auto make_bcbc= [&]()
   {
   {
+    // Windows can't remember that nn is const.
+    constexpr const int nn = n == Eigen::Dynamic ? Eigen::Dynamic : n+m;
     Eigen::Matrix<Scalar,nn,1> bcbc(dyn_nn);
     Eigen::Matrix<Scalar,nn,1> bcbc(dyn_nn);
     bcbc.head(dyn_n) =  bc;
     bcbc.head(dyn_n) =  bc;
     return bcbc;
     return bcbc;