Opened 12 years ago
Closed 11 years ago
#5491 closed Bugs (fixed)
invalid result for user defined type
| Reported by: | 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)
Change History (3)
by , 12 years ago
| Attachment: | functional.patch added |
|---|
comment:1 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.

add check numeric_limits::is_specialized