From 098f6ef27e1e79a6634ea1f2ad6bffc91b3f506e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zuzek?= Date: Fri, 27 May 2022 11:38:58 +0200 Subject: [PATCH] fix infinite recursion crash on missing matrix_product overloads for transposed and scaled inputs #218 --- .../__p1673_bits/blas3_matrix_product.hpp | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/include/experimental/__p1673_bits/blas3_matrix_product.hpp b/include/experimental/__p1673_bits/blas3_matrix_product.hpp index 7c220284..cc0c3a73 100644 --- a/include/experimental/__p1673_bits/blas3_matrix_product.hpp +++ b/include/experimental/__p1673_bits/blas3_matrix_product.hpp @@ -368,23 +368,6 @@ constexpr bool extractConj () template struct is_custom_matrix_product_avail : std::false_type {}; -template -struct is_custom_matrix_product_avail< - Exec, A_t, B_t, C_t, - std::enable_if_t< - std::is_void_v< - decltype( - matrix_product - (std::declval(), - std::declval(), - std::declval(), - std::declval())) - > - && !linalg::impl::is_inline_exec_v - > - > - : std::true_type{}; - template struct is_custom_matrix_product_with_update_avail : std::false_type {}; @@ -2235,6 +2218,36 @@ void hermitian_matrix_right_product( hermitian_matrix_right_product(std::experimental::linalg::impl::default_exec_t(), A, t, B, E, C); } +template +struct is_custom_matrix_product_avail< + Exec, A_t, B_t, C_t, + std::enable_if_t< + std::is_void_v< + decltype( + matrix_product( + std::declval(), + std::declval(), + std::declval(), + std::declval())) + > + && !std::is_same_v< // see #218 + decltype( + std::experimental::linalg::matrix_product( + std::declval(), + std::declval(), + std::declval(), + std::declval())), + decltype( + matrix_product( + std::declval(), + std::declval(), + std::declval(), + std::declval())) + > + && !linalg::impl::is_inline_exec_v + > + > + : std::true_type{}; } // end namespace linalg } // end inline namespace __p1673_version_0