[ 
https://issues.apache.org/jira/browse/STDCXX-693?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12557927#action_12557927
 ] 

Travis Vitek commented on STDCXX-693:
-------------------------------------

Yes, I like that solution also. I've already done this for most of <valarray> 
for STDCXX-622 [which, I just noticed, appears to be a duplicate of STDCXX-512].

> std::valarray::sum does not work correctly for udt that has nonzero default 
> value
> ---------------------------------------------------------------------------------
>
>                 Key: STDCXX-693
>                 URL: https://issues.apache.org/jira/browse/STDCXX-693
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.2.0
>            Reporter: Travis Vitek
>            Priority: Minor
>
> #include <cassert>
> #include <valarray>
> struct S
> {
>     // this ctor should not be required
>     S ()
>         : value (21)
>     {
>     }
>     S (int v)
>         : value (v)
>     {
>     }
>     S (const S& rhs)
>         : value (rhs.value)
>     {
>     }
>     S& operator+= (const S& rhs)
>     {
>         value += rhs.value;
>         return *this;
>     }
>     int value;
> };
> int main ()
> {
>     const std::valarray<S> b (S (10), 1); // 10 elements with value 1
>     assert (b.sum ().value == 10);
>     return 0;
> } 
> The wording in the standard seems to imply that the returned value should be 
> a copy of one of the elements, and that op+= should be called on all of the 
> other elements. If this is the case, then this an additional issue that would 
> be detectable in user code [the user can count how many times the op+= is 
> invoked]. This issue may apply to the min() and max() methods as well.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to