Opened 12 years ago

Closed 11 years ago

#5491 closed Bugs (fixed)

invalid result for user defined type

Reported by: Akira Takahashi <faithandbrave@…> Owned by: Eric Niebler
Milestone: To Be Determined Component: accumulator
Version: Boost 1.46.1 Severity: Problem
Keywords: Cc:

Description

min is invalid result for user defined type.

#include <iostream>
#include <limits>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>

using namespace boost::accumulators;


struct integer {
    int x;
    integer() : x(0) {}
    integer(int x) : x(x) {}

    integer& operator+=(integer other)
    {
        std::cout << "+=,";
        x += other.x;
        return *this;
    }
};
/*
namespace std {
    template <>
    struct numeric_limits<integer> {
        static const bool is_specialized = true;
        static ::integer max() { return std::numeric_limits<int>::max(); }
    };
}
*/
bool operator<(integer a, integer b)
{
    std::cout << "<,";
    return a.x < b.x;
}

int main()
{
    accumulator_set<integer, stats<tag::min, tag::sum> > acc;

    std::cout << "add:" << std::endl;
    acc(1);
    acc(2);
    acc(3);

    std::cout << std::endl;
    std::cout << "extract:" << std::endl;
    const integer a = extract::min(acc);
    const integer b = extract::sum(acc);

    std::cout << std::endl;
    std::cout << "result:" << std::endl;
    std::cout << a.x << std::endl;
    std::cout << b.x << std::endl;
}

result:

add:
<,+=,<,+=,<,+=,
extract:

result:
0
6

min result should be 1.

This problem is integer type non specialize std::numeric_limits. Should check std::numeric_limits::is_specialized.

I send patch.

Attachments (2)

functional.patch (1.7 KB ) - added by Akira Takahashi <faithandbrave@…> 12 years ago.
add check numeric_limits::is_specialized
functional.hpp (21.6 KB ) - added by Akira Takahashi <faithandbrave@…> 12 years ago.
patched source

Download all attachments as: .zip

Change History (3)

by Akira Takahashi <faithandbrave@…>, 12 years ago

Attachment: functional.patch added

add check numeric_limits::is_specialized

by Akira Takahashi <faithandbrave@…>, 12 years ago

Attachment: functional.hpp added

patched source

comment:1 by Eric Niebler, 11 years ago

Resolution: fixed
Status: newclosed

(In [74477]) merge [74476] from trunk, fixes #5491

Note: See TracTickets for help on using tickets.