Modify

Ticket #5491 (closed Bugs: fixed)

Opened 6 years ago

Last modified 6 years ago

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

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

Change History

Changed 6 years ago by Akira Takahashi <faithandbrave@…>

add check numeric_limits::is_specialized

Changed 6 years ago by Akira Takahashi <faithandbrave@…>

patched source

comment:1 Changed 6 years ago by eric_niebler

  • Status changed from new to closed
  • Resolution set to fixed

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

View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.