Core: Fix triangular_in_place_workspace ODR issue

libeigen/eigen!3046

diff --git a/Eigen/src/Core/TriangularInPlace.h b/Eigen/src/Core/TriangularInPlace.h
index 09e1c3c..a5e28d7 100644
--- a/Eigen/src/Core/TriangularInPlace.h
+++ b/Eigen/src/Core/TriangularInPlace.h
@@ -42,8 +42,10 @@
 }
 
 template <typename MatrixType>
-using triangular_in_place_workspace = Matrix<typename MatrixType::Scalar, Dynamic, Dynamic,
-                                             (int(traits<MatrixType>::Flags) & RowMajorBit) ? RowMajor : ColMajor>;
+struct triangular_in_place_workspace {
+  using type = Matrix<typename MatrixType::Scalar, Dynamic, Dynamic,
+                      (int(traits<MatrixType>::Flags) & RowMajorBit) ? RowMajor : ColMajor>;
+};
 
 // Unblocked lower triangular inverse, columns bottom-up so that the trailing block already holds
 // X22 = L22^-1 when column j is reached: then X(j+1:, j) = -X22 L(j+1:, j) / L(j, j), one TRMV per
@@ -86,7 +88,7 @@
   const Index block_size = triangular_in_place_block_size(n, kTriangularInverseMinBlockSize);
   // One block-sized panel, whose first column doubles as the TRMV scratch of the unblocked kernel:
   // that kernel runs on L11 only after the panel's other uses in the same iteration are finished.
-  triangular_in_place_workspace<MatrixType> work(block_size, block_size);
+  typename triangular_in_place_workspace<MatrixType>::type work(block_size, block_size);
   for (Index k = ((n - 1) / block_size) * block_size; k >= 0; k -= block_size) {
     const Index bs = numext::mini(block_size, n - k);
     const Index rs = n - k - bs;
@@ -157,7 +159,7 @@
     return;
   }
   const Index block_size = triangular_in_place_block_size(n, kAdjointSquareMinBlockSize);
-  triangular_in_place_workspace<MatrixType> work(block_size, block_size);
+  typename triangular_in_place_workspace<MatrixType>::type work(block_size, block_size);
   for (Index k = 0; k < n; k += block_size) {
     const Index bs = numext::mini(block_size, n - k);
     const Index rs = n - k - bs;