[Bug libstdc++/61166] New: overflow when parse number in std::duration operator""
kan.liu.229 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue May 13 07:42:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61166
Bug ID: 61166
Summary: overflow when parse number in std::duration operator""
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: kan.liu.229 at gmail dot com
overflow may occur when using a number whose size exceeds sizeof(unsigned) in
chrono_literals. Because the parse classes in include/bits/parse_number.h just
use *unsigned* for member type. However, it should accept *unsigned long long*
I think. This issue also exists in trunk I think.
#include <chrono>
using namespace std;
using namespace std::chrono;
int main() {
// std::numeric_limits<unsigned>::max() == 4294967295
cout << 429496729510 << endl;
cout << (429496729510h).count() << endl;
return 0;
}
And the result is
429496729510
926648584
More information about the Gcc-bugs
mailing list