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; \