https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121529

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
So maybe:

--- a/libstdc++-v3/include/bits/valarray_after.h
+++ b/libstdc++-v3/include/bits/valarray_after.h
@@ -346,6 +346,7 @@ namespace __detail
     operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v,   \
                 const _Expr<_Dom2, typename _Dom2::value_type>& __w)   \
     {                                                                   \
+      __glibcxx_assert(__v.size() == __w.size());                      \
       typedef typename _Dom1::value_type _Arg;                          \
       typedef typename __fun<_Name, _Arg>::result_type _Value;          \
       typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure;     \
@@ -385,6 +386,7 @@ namespace __detail
     operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e,      \
                  const valarray<typename _Dom::value_type>& __v)        \
     {                                                                   \
+      __glibcxx_assert(__v.size() == __e.size());                      \
       typedef typename _Dom::value_type _Arg;                           \
       typedef typename __fun<_Name, _Arg>::result_type _Value;          \
       typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure;   \
@@ -398,6 +400,7 @@ namespace __detail
     operator _Op(const valarray<typename _Dom::value_type>& __v,        \
                  const _Expr<_Dom, typename _Dom::value_type>& __e)     \
     {                                                                   \
+      __glibcxx_assert(__v.size() == __e.size());                      \
       typedef typename _Dom::value_type _Tp;                            \
       typedef typename __fun<_Name, _Tp>::result_type _Value;           \
       typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure;    \

Reply via email to