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;