https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120320
--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
or rather:
--- a/matrix.h
+++ b/matrix.h
@@ -1187,7 +1187,9 @@ struct storage_mul<T, S>
Specialization for DenseMatrix * Matrix or Matrix * DenseMatrix or
SparseMatrix * Matrix or
Matrix * SparseMatrix. */
template<Matrix T1, Matrix T2>
-requires(DenseMatrix<T1> || DenseMatrix<T2> || SparseMatrix<T1> ||
SparseMatrix<T2>)
+requires(DenseMatrix<T1> || DenseMatrix<T2>
+ || (!DiagonalMatrix<T1> && !DiagonalMatrix<T2>
+ && (SparseMatrix<T1> || SparseMatrix<T2>)))
struct storage_mul<T1, T2>
{
storage_mul() = delete;