Temporary workaround for bug #875:
Let TriangularView<Sparse>::nonZeros() return nonZeros() of the nested expression
diff --git a/Eigen/src/SparseCore/SparseTriangularView.h b/Eigen/src/SparseCore/SparseTriangularView.h
index 1f5e531..e051f44 100644
--- a/Eigen/src/SparseCore/SparseTriangularView.h
+++ b/Eigen/src/SparseCore/SparseTriangularView.h
@@ -50,6 +50,13 @@
 
     template<typename OtherDerived> void solveInPlace(MatrixBase<OtherDerived>& other) const;
     template<typename OtherDerived> void solveInPlace(SparseMatrixBase<OtherDerived>& other) const;
+
+    inline Index nonZeros() const {
+      // FIXME HACK number of nonZeros is required for product logic
+      // this returns only an upper bound (but should be OK for most purposes)
+      return derived().nestedExpression().nonZeros();
+    }
+
   
 };