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