@@ -16,10 +16,10 @@ namespace cp_algo::linalg {
16
16
17
17
valarray_base (base const & t): Base(t, 1 ) {}
18
18
19
- auto begin () {return std::begin (static_cast <Base&>(* this ));}
20
- auto end () {return std::end ( static_cast <Base&>(* this ));}
21
- auto begin () const {return std::begin ( static_cast <Base const &>(* this ));}
22
- auto end () const {return std::end (static_cast <Base const &>(* this ));}
19
+ auto begin () {return std::begin (to_valarray ( ));}
20
+ auto begin () const {return std::begin ( to_valarray ( ));}
21
+ auto end () {return std::end ( to_valarray ( ));}
22
+ auto end () const {return std::end (to_valarray ( ));}
23
23
24
24
bool operator == (vec const & t) const {return std::ranges::equal (*this , t);}
25
25
bool operator != (vec const & t) const {return !(*this == t);}
@@ -31,17 +31,17 @@ namespace cp_algo::linalg {
31
31
std::ranges::copy (R, res.begin ());
32
32
return res;
33
33
}
34
+ Base& to_valarray () {return static_cast <Base&>(*this );}
35
+ Base const & to_valarray () const {return static_cast <Base const &>(*this );}
34
36
};
35
37
36
38
template <class vec , typename base>
37
39
vec operator +(valarray_base<vec, base> const & a, valarray_base<vec, base> const & b) {
38
- return static_cast <std::valarray<base> const &>(a)
39
- + static_cast <std::valarray<base> const &>(b);
40
+ return a.to_valarray () + b.to_valarray ();
40
41
}
41
42
template <class vec , typename base>
42
43
vec operator -(valarray_base<vec, base> const & a, valarray_base<vec, base> const & b) {
43
- return static_cast <std::valarray<base> const &>(a)
44
- - static_cast <std::valarray<base> const &>(b);
44
+ return a.to_valarray () - b.to_valarray ();
45
45
}
46
46
47
47
template <class vec , typename base>
0 commit comments