Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
4.2.0, 4.2.1
-
None
-
Incorrect Behavior
Description
#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.